我需要一种在 Windows 中以编程方式检测显示器是否宽的方法。
GetSystemMetrics 返回桌面的大小,这很有效,但如果用户有一个宽屏显示器,比如 1024x768,我会错误地将其归类为非宽屏。
GetDeviceCaps 与 HORZRES 和 VERTRES 有类似的问题,即使在宽显示器中使用非宽分辨率时,HORZSIZE 和 VERTSIZE 也会给出不正确的结果。
有没有办法可靠地检测到这一点?
我需要一种在 Windows 中以编程方式检测显示器是否宽的方法。
GetSystemMetrics 返回桌面的大小,这很有效,但如果用户有一个宽屏显示器,比如 1024x768,我会错误地将其归类为非宽屏。
GetDeviceCaps 与 HORZRES 和 VERTRES 有类似的问题,即使在宽显示器中使用非宽分辨率时,HORZSIZE 和 VERTSIZE 也会给出不正确的结果。
有没有办法可靠地检测到这一点?
您也许可以通过EDID获得实际的物理尺寸。请参阅此处:如何获得显示器的正确物理尺寸?
这是一个更好的版本,它不会与 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";
干杯。
尝试 SystemInformation.PrimaryMonitorSize
明智的做法是按宽高比对显示器进行分类。这就是我最近看到的很多游戏所做的事情。
如果你能得到宽度,那么你可能会得到高度。在那之后,答案只是一个小小的数学运算。