【问题标题】:`EnumDisplaySettings` repeating same Resolution Multiple Times`EnumDisplaySettings` 多次重复相同的分辨率
【发布时间】:2011-08-12 03:36:42
【问题描述】:

这是我的代码

DEVMODE dm;
int index = 0;
while(0 != EnumDisplaySettings(NULL, index++, &dm)){
    qDebug() << index-1 << dm.dmPelsWidth << dm.dmPelsHeight;
    Resolution* resolution = new Resolution(dm.dmPelsWidth, dm.dmPelsHeight);
}

输出

0 320 200 
1 320 200 
2 320 200 
3 320 240 
4 320 240 
5 320 240 
6 400 300 
7 400 300 
8 400 300 
9 512 384 
10 512 384 
11 512 384 
12 640 400 
13 640 400 
14 640 400 
15 640 480 
.....
25 640 480 
26 640 480 
27 800 600 
.....
41 800 600 
42 1024 768 
50 1024 768 
51 1152 864 
....
62 1152 864 
63 1280 600 

我得到的回报只有一件事,那就是 320x200,甚至连我目前的决议 1600x900 都没有。

【问题讨论】:

    标签: winapi qt gdi


    【解决方案1】:

    EnumDisplaySettings 为您提供所有可能的屏幕参数组合。

    诀窍是知道要注意DEVMODE 结构的哪些字段。

    这些重要的领域是:

    • dmDisplayFixedOutput
    • dmDisplayFrequency
    • dmPelsWidth
    • dmPelsHeight
    • dmBitsPerPel

    例如,以下是我的显示器的前 14 个合法设置:

    dmPelsWidth dmPelsHeight dmBitsPerPixel dmDisplayFrequence dmDisplayFixedOutput 640 480 8 59 默认 640 480 8 59 拉伸 640         480         8          59           中心 640 480 8 60 默认 640 480 8 60 拉伸 640         480         8          60           中心 640 480 8 75 默认 640 480 16 59 默认 640 480 16 59 拉伸 640        480        16         59           中心 640 480 16 60 默认 640 480 16 60 拉伸 640         480         16         60           中心 640 480 16 75 默认 (... 等等 ...)

    【讨论】:

      【解决方案2】:

      您需要循环调用它。我的感觉是用while 替换if 会立即解决这个问题。

      【讨论】:

      • 但它给出了 364 个分辨率的列表。这太多了,它多次重复相同的分辨率。我正在更新我的问题。请检查一下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 2016-05-05
      相关资源
      最近更新 更多