2008-11-24 4 views
6

Beim Abrufen der DPI für den Bildschirm unter Windows (mit :: GetDeviceCaps) ist der horizontale Wert immer der gleiche wie der vertikale? Zum Beispiel:Windows GDI: horizontal/vertikal DPI

HDC dc = ::GetDC(NULL); 
const int xDPI = ::GetDeviceCaps(dc, LOGPIXELSX); 
const int yDPI - ::GetDeviceCaps(dc, LOGPIXELSY); 
assert(xDPI == yDPI); 
::ReleaseDC(NULL, dc); 

Sind diese Werte jemals anders?

+0

Nicht seit der 320x200 Anzeigemodus obsolet wurde. –

+0

Warum etwas annehmen? Sie wissen bereits, wie man beides abfragt, also warum nicht einfach nach jedem von ihnen abfragen? Sie können Ihren Code auch zukunftssicher machen, nur für den Fall, dass etwas passiert, das anders ist! –

Antwort

6

Es ist möglich, dass es anders ist, aber das gilt im Allgemeinen nur für Drucker. Es kann davon ausgegangen werden, dass der Bildschirm immer identische horizontale und vertikale DPIs aufweist.

+0

Tun Sie das nicht. Wir müssen vielleicht wieder mit nicht quadratischen Pixeln kämpfen. – Joshua

1

Ich habe sie nie anders sein gesehen, aber auf this MSDN-Seite sehe ich einen Kommentar, lässt vermuten, dass sie sein könnten:

int nHorz = dc.GetDeviceCaps(LOGPIXELSX); 
    int nVert = dc.GetDeviceCaps(LOGPIXELSY); 

    // almost always the same in both directions, but sometimes not! 
0

Ich habe nie einen Fall gesehen haben, wo sie anders sind, aber die Tatsache, dass es zwei getrennte Anrufe für es gibt stark darauf hin, dass sie manchmal sein könnten.

0

Es ist einfach für sie unterschiedlich zu sein, wenn der Monitor so konfiguriert ist, dass er ein Bildschirmauflösungsverhältnis verwendet, das nicht dem physischen Bildschirmverhältnis entspricht, z. B. eine Auflösung von 4: 3 wie 1600x1200 auf einem 16: 9-Bildschirm.

+1

Auch wenn der physische Bildschirm keine quadratischen Pixel anzeigt, ist es nicht möglich, Windows so zu konfigurieren, dass dies berücksichtigt wird. –