[英]How to detect whether a monitor is widescreen in Windows
在Windows中,我需要一种以编程方式检测显示器是否宽的方法。
GetSystemMetrics返回桌面的大小,这种方式有效,但如果用户有宽屏显示器,比如1024x768,我会错误地将其分类为非宽范围。
GetDeviceCaps与HORZRES和VERTRES有类似的问题,当在宽监视器中使用非宽分辨率时,甚至HORZSIZE和VERTSIZE也会给出错误的结果。
有没有办法可靠地检测到这个?
您可以通过EDID获得实际的物理尺寸。 请参见此处: 如何获得正确的显示器物理尺寸?
这是一个更好的版本,不会弄乱EDID或注册表。 它使得假设(IMHO非常准确)的假设是显示器支持的最大分辨率是最佳的原生适合度。
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
明智的做法是按宽度与高度的比例对显示器进行分类。 这就是我现在看到的很多游戏。
如果你可以得到宽度,那么你可以得到高度。 在那之后,答案只是一个小的数学运算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.