gpt4 book ai didi

winapi - 如何获得Win32 API中所有屏幕的尺寸(RECT)?

转载 作者:行者123 更新时间:2023-12-03 15:25:56 24 4
gpt4 key购买 nike

我正在为测试团队编写一个应用程序。该应用程序的作用是使您可以截取屏幕任何部分的屏幕截图(然后将其上传到带有注释的测试团队服务器)。

截屏包括在屏幕上选择要截屏的区域。为此,我创建了一个半透明的窗口并将其覆盖在整个屏幕上。我目前正在使用GetDesktopWindow()GetWindowRect()来获取屏幕的尺寸,但这在多屏幕环境中不起作用。

如何在所有可能的屏幕上覆盖一个窗口?

屏幕配置可能非常奇怪,例如:

     [LCD]
[LCD][LCD][LCD]

(4个液晶显示屏-顶部一个,底部三个)

或者
[LCD]     [LCD]
[LCD][LCD][LCD]
[LCD] [LCD]

(7个LCD屏幕-右侧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);
}
};

如果仅使用 rcCombined矩形创建一个大窗口,它将覆盖所有屏幕,并且系统将自动裁剪掉“丢失”的位。

关于winapi - 如何获得Win32 API中所有屏幕的尺寸(RECT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18112616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com