我正在为测试团队编写一份应用程序。该应用程序的作用是让您截取屏幕任何部分的屏幕截图(然后将其连同注释一起上传到测试团队服务器)。
截屏涉及选择屏幕上要截屏的区域。为此,我创建了一个半透明窗口并将其覆盖在整个屏幕上。我目前正在使用GetDesktopWindow()
and GetWindowRect()
获取屏幕的尺寸,但这在多屏幕环境中不起作用。
如何将窗口覆盖在所有可能的屏幕上?
屏幕配置可能非常奇特,例如:
[LCD]
[LCD][LCD][LCD]
(4 个液晶屏 - 1 个在顶部,3 个在底部)
Or
[LCD] [LCD]
[LCD][LCD][LCD]
[LCD] [LCD]
(7 个液晶屏 - 3 个在右侧,3 个在左侧,1 个在中间)。
Etc.
有谁知道如何将 1 个窗口覆盖所有屏幕?我想知道第一个奇特示例中的尺寸会是什么样子,当顶行左侧和右侧没有屏幕时?
也许我应该为每个 LCD 屏幕创建一个覆盖窗口?
有任何想法吗?
您可以使用EnumDisplayMonitors
为此功能。这是一个小类,它自动构建系统中所有监视器的向量以及它们的并集。
struct MonitorRects
{
std::vector<RECT> rcMonitors;
RECT rcCombined;
static BOOL CALLBACK MonitorEnum(HMONITOR hMon,HDC hdc,LPRECT lprcMonitor,LPARAM pData)
{
MonitorRects* pThis = reinterpret_cast<MonitorRects*>(pData);
pThis->rcMonitors.push_back(*lprcMonitor);
UnionRect(&pThis->rcCombined, &pThis->rcCombined, lprcMonitor);
return TRUE;
}
MonitorRects()
{
SetRectEmpty(&rcCombined);
EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this);
}
};
如果您只是使用以下命令创建一个大窗口rcCombined
矩形,它将覆盖所有屏幕,并且“丢失”的位将被系统自动剪掉。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)