获取所有支持的屏幕分辨率

3

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

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

#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 及以上分辨率,但在运行这个小程序时,我也看到了 400x300、320x240 等。

请问是否有人能够提供帮助和建议呢? 谢谢!


不要忘记频率。 - chris
频率是什么意思? - user1386966
2
在相同分辨率下可能会有所不同的其他字段包括:dmDisplayOrientationdmDisplayFixedOutputdmDisplayFlags - MSalters
1个回答

3

您的代码完美运行。关于您的两个问题:

  1. 有多种显示模式具有相同的分辨率。它们可能在其他方面不同,例如色深、频率或交错。
  2. Windows GUI从根本上不允许您设置低于某个数量的分辨率或色深度。在Windows '9x中,它是640x480和16种颜色。现在是800x600。这只是因为Windows UI在小尺寸下无法使用。您甚至看不到询问分辨率是否有效的消息!此外,GUI可能仅返回与您的监视器纵横比匹配的分辨率。

编辑:通过“频率”,我们指的是“刷新率”。


1
可以确认。已经测试了320x200,结果并不好玩。实际上,第一次还有点好玩。 - chris
非常感谢!有没有办法只获取GUI支持的分辨率?我想运行一个小测试,尝试所有可能的分辨率。 - user1386966
据我所知没有这样的情况。只需确保将分辨率设置回来即可。过去,我曾编写过一些游戏,在崩溃时设置了奇怪的分辨率,让你很难恢复。 :-/ - Moby Disk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接