如何从 Winapi(C 或 C++ 中)检测当前屏幕分辨率?
一些背景:
我想启动一个新的 OpenGL 全屏窗口,但希望它以与桌面已设置的相同水平和垂直大小打开。 (现在当每个人都使用 LCD 屏幕时,我认为这是获得屏幕原始分辨率的最佳方式。)
我并不迫切需要知道桌面颜色深度,尽管那将是一个不错的奖励。
原文由 Prof. Falken 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何从 Winapi(C 或 C++ 中)检测当前屏幕分辨率?
一些背景:
我想启动一个新的 OpenGL 全屏窗口,但希望它以与桌面已设置的相同水平和垂直大小打开。 (现在当每个人都使用 LCD 屏幕时,我认为这是获得屏幕原始分辨率的最佳方式。)
我并不迫切需要知道桌面颜色深度,尽管那将是一个不错的奖励。
原文由 Prof. Falken 发布,翻译遵循 CC BY-SA 4.0 许可协议
当系统使用 DPI 虚拟化(Vista 及更高版本)时,使用 GetSystemMetrics 或 GetWindowRect 将 无法 获得真实的屏幕分辨率(您将获得虚拟分辨率),除非您创建了 DPI Aware Application 。
所以这里最好的选择(简单和向后兼容)是使用 EnumDisplaySettings 和 ENUM_CURRENT_SETTINGS。
原文由 fingeros 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答1.9k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.1k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
3 回答1.4k 阅读✓ 已解决
编辑:重要的是要记住,监视器并不总是在 0x0 处“开始”,因此仅知道大小不足以定位您的窗口。您可以使用 MonitorFromWindow 找到您的窗口所在的监视器,然后调用 GetMonitorInfo
如果您想走低级路线或更改您需要使用 EnumDisplayDevices、EnumDisplaySettings 和 ChangeDisplaySettings 的分辨率(这是获得刷新率 AFAIK 的唯一方法,但 GetDeviceCaps 会告诉您颜色深度)