Pro*_*ica 36 c c++ api winapi resolution
如何从Winapi(在C或C++中)检测当前的屏幕分辨率?
一些背景:
我想开始一个新的OpenGL全屏窗口,但希望它以桌面已经设置的相同水平和垂直大小打开.(现在当每个人都使用LCD屏幕时,我认为这是获得屏幕原始分辨率的最佳方式.)
我并不急需知道桌面颜色深度,虽然这将是一个很好的奖励.
And*_*ers 67
编辑:重要的是要记住监视器并不总是在0x0处"开始",所以只知道大小不足以定位窗口.您可以使用MonitorFromWindow查找窗口所在的监视器,然后调用GetMonitorInfo
如果你想要使用低级路由或更改分辨率,你需要使用EnumDisplayDevices,EnumDisplaySettings和ChangeDisplaySettings(这是获得刷新率AFAIK的唯一方法,但GetDeviceCaps会告诉你颜色深度)
小智 6
当系统使用DPI虚拟化(Vista及更高版本)时,使用GetSystemMetrics或GetWindowRect将无法获得真正的屏幕分辨率(您将获得虚拟分辨率),除非您创建了DPI Aware Application.
因此,这里的最佳选择(简单和向后兼容)是将EnumDisplaySettings与ENUM_CURRENT_SETTINGS 一起使用.
它是带有以下参数的GetSystemMetrics:
SM_CXSCREEN <width
SM_CYSCREEN <height
正如它所说(SM_CXSCREEN):
主显示器屏幕的宽度,以像素为单位.这是通过调用GetDeviceCaps获得的相同值,如下所示:GetDeviceCaps(hdcPrimaryMonitor,HORZRES).
归档时间: |
|
查看次数: |
79236 次 |
最近记录: |