我正在为测试团队编写一个应用程序.该应用程序的作用是让您截取屏幕的任何部分(然后将其上传到带有注释的测试团队服务器).
截屏涉及选择屏幕上的区域以截取屏幕截图.为此,我正在创建一个半透明窗口并将其覆盖在整个屏幕上.我目前正在使用GetDesktopWindow()并GetWindowRect()获取屏幕的尺寸,但这在多屏幕环境中不起作用.
如何在所有可能的屏幕上叠加窗口?
屏幕配置非常具有异国情调,例如:
[LCD]
[LCD][LCD][LCD]
Run Code Online (Sandbox Code Playgroud)
(4个液晶屏 - 一个在顶部,3个在底部)
要么
[LCD] [LCD]
[LCD][LCD][LCD]
[LCD] [LCD]
Run Code Online (Sandbox Code Playgroud)
(7个液晶屏 - 右边3个,左边3个,中间1个).
等等.
有谁知道如何在所有屏幕上覆盖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);
}
};
Run Code Online (Sandbox Code Playgroud)
如果您只是使用rcCombined矩形创建一个大窗口,它将覆盖所有屏幕,系统会自动剪切"丢失"位.
| 归档时间: |
|
| 查看次数: |
2793 次 |
| 最近记录: |