如何在使用ATL时获取桌面Rect?

时间:2017-06-05 20:38:28

标签: c++ atl

我想从对话框中获取整个桌面的Rect,并且ATL已将GetWindowRect(HWND hWnd, LPRECT lpRect)覆盖为GetWindowRect(LPRECT lpRect)并且它假设当前的对话窗口,因此它只填充{{1}有自己的尺寸。

如何获取桌面窗口的Rect?我已尝试使用lpRect,但它会返回GetDesktopWindow(),但我仍然找不到Rect。

2 个答案:

答案 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)
相关问题