我正在编写一个小程序让我切换我的分辨率,因为我的投影机无法处理与我的屏幕相同的分辨率.我已经知道如何使用
Windows API设置屏幕分辨率.以及使用Windows API或QT4工具包读取当前的分辨率.我的问题是我想要一个菜单的所有不同的分辨率支持的屏幕和显卡.这个程序将被分发,所以我需要程序实际上与图形卡通信,以找出它支持什么.我想使用的唯一的API是Windows API或QT4工具包,但我不认为QT4会这样做,除非您以奇怪的方式使用图形部件.
我很确定这是可能与WINDOWS API.我只是不知道该怎么做.
哦,请给我一些松懈,我熟悉QT4和C,但我通常是一个Linux程序员,我正在写给别人.我用Windows API做的唯一的事情就是做一个消息框,设置背景,并使用系统变量.所以请简单说明一下这个过程.请不要只是发布到msdn的链接,我讨厌他们的文档,我讨厌微软.我每年使用Windows也许两次.
解决方法
在一般情况下,以下内容可能适用于您
DEVMODE dm = { 0 }; dm.dmSize = sizeof(dm); for( int iModeNum = 0; EnumDisplaySettings( NULL,iModeNum,&dm ) != 0; iModeNum++ ) { cout << "Mode #" << iModeNum << " = " << dm.dmPelsWidth << "x" << dm.dmPelsHeight << endl; }
这应该打印出运行.exe的当前显示的所有支持的分辨率.假设你没有处理多显示图形卡,这应该是正常的.否则,您必须在每个显示器上使用EnumDisplayDevices循环.
一旦找出你想要的分辨率,你可以使用’ChangeDisplaySettingsEx’来将显示改变为所需的模式.
使用DirectX是可能的,但我不会推荐它,因为代码更复杂(必须初始化DirectX和使用COM指针),除非您打算实际使用DirectX不仅仅是确定显示分辨率.