VC中如何获取窗口相对桌面的位置
来源:百度知道 编辑:UC知道 时间:2024/06/01 17:01:50
yuzikai UOI_NAME只能取到名字,GetUserObjectInformation的其他参数也没有说明哪一个可以取到位置啊,能不能说得更详细一点
好象直接GetWindowRect就可以了
GetWindowRect() 得到的是在屏幕坐标系下的RECT(即以屏幕左上角为原点)
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的帮助