`EnumDisplaySettings`多次重复相同的分辨率

时间:2011-04-25 05:56:53

标签: winapi qt gdi

这是我的代码

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,这是我目前的决议。

2 个答案:

答案 0 :(得分:1)

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

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

这些重要字段是:

  • dmDisplayFixedOutput
  • dmDisplayFrequency
  • dmPelsWidth
  • dmPelsHeight
  • dmBitsPerPel

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

    dmPelsWidth dmPelsHeight  dmBitsPerPixel  dmDisplayFrequence  dmDisplayFixedOutput         
    640           480            8              59                  Default 
    640           480            8              59                 Stretch 
    640           480            8              59                  Center 
    640           480            8              60                 Default 
    640           480            8              60                 Stretch 
    640           480            8              60                  Center 
    640           480            8              75                 Default 
    640           480            16             59                 Default 
    640           480            16             59                 Stretch 
    640           480            16             59                  Center 
    640           480            16             60                 Default 
    640           480            16             60                 Stretch 
    640           480            16             60                  Center 
    640           480            16             75                 Default 
    (... etc ...)

答案 1 :(得分:0)

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