3

我需要一种在 Windows 中以编程方式检测显示器是否宽的方法。

GetSystemMetrics 返回桌面的大小,这很有效,但如果用户有一个宽屏显示器,比如 1024x768,我会错误地将其归类为非宽屏。

GetDeviceCaps 与 HORZRES 和 VERTRES 有类似的问题,即使在宽显示器中使用非宽分辨率时,HORZSIZE 和 VERTSIZE 也会给出不正确的结果。

有没有办法可靠地检测到这一点?

4

4 回答 4

4

您也许可以通过EDID获得实际的物理尺寸。请参阅此处:如何获得显示器的正确物理尺寸?

于 2009-09-25T15:35:50.637 回答
2

这是一个更好的版本,它不会与 EDID 或注册表混淆。它假设(恕我直言,非常准确)显示器支持的最大分辨率是最适合的。

DEVMODEA modeInfo;
modeInfo.dmSize = sizeof(DEVMODEA);
modeInfo.dmDriverExtra = NULL;
int modeNum = 0;
int xMax = 0, yMax = 0;
while (EnumDisplaySettingsExA(0, modeNum, &modeInfo, 0)) {
    ++modeNum;
    if (modeInfo.dmPelsWidth > xMax) {
        xMax = modeInfo.dmPelsWidth;
        yMax = modeInfo.dmPelsHeight;
    }
}
cout << "Monitor aspect ratio : " << (double)xMax/yMax << "\n";

干杯。

于 2009-12-07T14:00:07.247 回答
0

尝试 SystemInformation.PrimaryMonitorSize

于 2009-09-25T15:32:06.910 回答
0

明智的做法是按宽高比对显示器进行分类。这就是我最近看到的很多游戏所做的事情。

如果你能得到宽度,那么你可能会得到高度。在那之后,答案只是一个小小的数学运算。

于 2009-09-25T15:54:46.673 回答