EnumDisplaySettings повторяет одно и то же разрешение несколько раз - PullRequest
0 голосов
/ 25 апреля 2011

Вот мой код

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 ]

1 голос
/ 18 октября 2012

EnumDisplaySettings дает вам все возможные комбинации параметров экрана.

Хитрость заключается в том, чтобы знать, на какие поля структуры DEVMODE следует обратить внимание.

Эти важные поля:

  • dmDisplayFixedOutput
  • dmDisplayFrequency
  • dmPelsWidth
  • dmPelsHeight
  • dmBitsPerPel
* 1020 Например, здесь 1020первые 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 ...)
0 голосов
/ 25 апреля 2011

Вы должны вызвать это в цикле.Мне кажется, что замена if на while мгновенно решит эту проблему.

...