我想从对话框中获取整个桌面的Rect,并且ATL已将GetWindowRect(HWND hWnd, LPRECT lpRect)
覆盖为GetWindowRect(LPRECT lpRect)
并且它假设当前的对话窗口,因此它只填充{{1}有自己的尺寸。
如何获取桌面窗口的Rect?我已尝试使用lpRect
,但它会返回GetDesktopWindow()
,但我仍然找不到Rect。
答案 0 :(得分:1)
对于初学者,如果您想绕过ATL的::GetWindowRect(hWnd, lpRect);
成员,可以CWindow::GetWindowRect(LPRECT)
。
桌面不一定是矩形的,因为您的系统可能是多显示器。
如果忽略多显示器方面,则可以使用GetSystemMetrics(SM_CXSCREEN)
+ GetSystemMetrics(SM_CYSCREEN)
(或GetSystemMetrics(SM_CXVIRTUALSCREEN)
+ GetSystemMetrics(SM_CYVIRTUALSCREEN)
)或SystemParametersInfo(SPI_GETWORKAREA, ...)
API。 ATL不提供任何快捷方式,这些快捷方式必须是直接的API调用。
使用多监视器系统enumerate monitors并为每个枚举系统获取一个工作区。他们一起是桌面:
要枚举计算机上的所有设备,请调用
EnumDisplayDevices
功能。返回的信息还表明哪个监视器是桌面的一部分。
答案 1 :(得分:0)
我发现the MSDN page of CWindow上的这个代码段似乎可以满足您的需求:
HWND hWnd = ::GetDesktopWindow();
CWindow myWindow;
myWindow.Attach(hWnd);
在此之后,您应该可以使用
myWindow.GetWindowRect(lpRect)