VC中如何获取窗口相对桌面的位置

我取得一个窗口控件的句柄,比如说窗体上的一个按钮,或者是系统托盘中的一个图标,如何知道它相对于屏幕的绝对位置yuzikaiUOI_NAME只能取到名字,GetUserOb... 我取得一个窗口控件的句柄,比如说窗体上的一个按钮,或者是系统托盘中的一个图标,如何知道它相对于屏幕的绝对位置
yuzikai UOI_NAME只能取到名字,GetUserObjectInformation的其他参数也没有说明哪一个可以取到位置啊,能不能说得更详细一点

好象直接GetWindowRect就可以了
展开
 我来答
jackilee1980
2008-01-24 · TA获得超过486个赞
知道小有建树答主
回答量:285
采纳率:0%
帮助的人:0
展开全部
GetWindowRect() 得到的是在屏幕坐标系下的RECT(即以屏幕左上角为原点)

GetClientRect() 得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)

ScreenToClient() 就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。

我的总结:

如果需要获得窗体在屏幕上的位置,使用GetWindowRect

如果需要获得窗体的大小,使用GetClientRect
yuzikai
2008-01-24 · TA获得超过427个赞
知道小有建树答主
回答量:283
采纳率:100%
帮助的人:150万
展开全部
改一下:
其实很方便的.先用GetCurrentThreadId获得线程ID,然后用GetThreadDesktop函数:
HDESK GetThreadDesktop(
DWORD dwThreadId // thread identifier
);
直接就获得了桌面句柄.然后用这个:
BOOL GetUserObjectInformation(
HANDLE hObj, // handle of object to get information for
int nIndex, // type of information to get
PVOID pvInfo, // points to buffer that receives the information
DWORD nLength, // size, in bytes, of pvInfo buffer
LPDWORD lpnLengthNeeded // receives required size, in bytes, of pvInfo buffer
);
把nIndex设成UOI_NAME,hObj设成刚刚获得的句柄,就可以在pvInfo接收到桌面名字.
当然也可以创建桌面,枚举桌面等等,还有好多API函数,讲不清楚了,可以参照MSDN或者DELPHI的帮助
当然,我个人还是认为桌面是一个容器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式