VC中如何获取窗口相对桌面的位置
我取得一个窗口控件的句柄,比如说窗体上的一个按钮,或者是系统托盘中的一个图标,如何知道它相对于屏幕的绝对位置yuzikaiUOI_NAME只能取到名字,GetUserOb...
我取得一个窗口控件的句柄,比如说窗体上的一个按钮,或者是系统托盘中的一个图标,如何知道它相对于屏幕的绝对位置
yuzikai UOI_NAME只能取到名字,GetUserObjectInformation的其他参数也没有说明哪一个可以取到位置啊,能不能说得更详细一点
好象直接GetWindowRect就可以了 展开
yuzikai UOI_NAME只能取到名字,GetUserObjectInformation的其他参数也没有说明哪一个可以取到位置啊,能不能说得更详细一点
好象直接GetWindowRect就可以了 展开
2个回答
展开全部
GetWindowRect() 得到的是在屏幕坐标系下的RECT(即以屏幕左上角为原点)
GetClientRect() 得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)
ScreenToClient() 就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。
我的总结:
如果需要获得窗体在屏幕上的位置,使用GetWindowRect
如果需要获得窗体的大小,使用GetClientRect
GetClientRect() 得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)
ScreenToClient() 就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。
我的总结:
如果需要获得窗体在屏幕上的位置,使用GetWindowRect
如果需要获得窗体的大小,使用GetClientRect
展开全部
改一下:
其实很方便的.先用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的帮助
当然,我个人还是认为桌面是一个容器
其实很方便的.先用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的帮助
当然,我个人还是认为桌面是一个容器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询