【问题标题】:Getting all supported screen resolutions获取所有支持的屏幕分辨率
【发布时间】:2014-07-23 22:43:53
【问题描述】:

我正在寻找一种方法来获得所有支持的分辨率。

在这里搜索一些解决方案后,我得到了这段代码:

#include "Windows.h"
#include <Windows.h>
#include <iostream>


using namespace std;

int main()
{
    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;
     }
 int age;
 cin>>age;

}

这段代码有两个问题:

  1. 运行它时,我一遍又一遍地得到相同的分辨率。 例如:Mode0、Mode1、Mode2.....Mode17都是:320x200

  2. 在使用 Gui 并查看可用分辨率时,我没有 320x200 作为选项。我看到我的电脑支持 600x800 及更高,但是在运行这个小 exe 时,我还看到 400x300、320x240 等。

有人可以帮忙和建议吗? 谢谢!

【问题讨论】:

  • 不要忘记频率。
  • 频率是什么意思?
  • 在相同分辨率下不同模式之间可能存在合理差异的其他字段:dmDisplayOrientationdmDisplayFixedOutputdmDisplayFlags

标签: c++ winapi screen-resolution


【解决方案1】:

您的代码运行良好。关于你的两个问题:

  1. 有多种显示模式具有相同的分辨率。它们可能在其他方面有所不同,例如颜色深度、频率或隔行扫描。
  2. Windows GUI 根本不允许您将分辨率或颜色深度设置为低于特定值。对于 Windows '9x,它是 640x480 和 16 色。现在是 800x600。这仅仅是因为 Windows UI 在特定大小以下无法工作。您甚至看不到询问解决方案是否有效的消息!此外,GUI 可能只返回与您的显示器纵横比相匹配的分辨率。

编辑:“频率”是指“刷新率”

【讨论】:

  • 可以确认。已经测试了 320x200,但并不好玩。其实第一次玩还蛮好玩的。
  • 非常感谢!有没有办法只获得 GUI 支持的那个?我想运行一个小测试,尝试所有可能的解决方案
  • 我不知道。只需确保将分辨率设置回来。在过去,我编写的游戏在崩溃时设置了奇怪的分辨率,你有时间回来。 :-/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多