2008-11-24 18 views
6

Al obtener el DPI para la pantalla en Windows (utilizando :: GetDeviceCaps), ¿el valor horizontal siempre será el mismo que el vertical? Por ejemplo:Windows GDI: horizontal/vertical DPI

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

¿Son estos valores alguna vez diferentes?

+0

No desde que el modo de pantalla 320x200 se volvió obsoleto. –

+0

¿Por qué asumir algo? Ya sabes cómo consultar para ambos, así que ¿por qué no solo consultar para cada uno de ellos? También podría proteger su código en el futuro, ¡en caso de que algo ocurra que sea diferente! –

Respuesta

6

Es posible que sea diferente, pero que generalmente solo se aplica a las impresoras. Se puede suponer con seguridad que la pantalla siempre tendrá DPI DPI horizontales y verticales idénticos.

+0

No hagas eso. Es posible que tengamos que lidiar nuevamente con píxeles no cuadrados. – Joshua

1

nunca he visto ser diferentes, pero en la página de MSDN this veo un comentario que sugiere que podrían ser:

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

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

nunca he visto un caso en el que son diferentes, pero la el hecho de que haya dos llamadas separadas sugiere fuertemente que podrían ser algunas veces.

0

Es fácil para ellos ser diferentes si el monitor está configurado para usar una relación de resolución de pantalla que no es la misma que la relación de pantalla física, como una resolución 4: 3 como 1600x1200 en una pantalla 16: 9.

+1

Incluso si la pantalla física no muestra píxeles cuadrados, no es posible configurar Windows para reflejar este hecho. –

Cuestiones relacionadas