Estoy trabajando para que mi aplicación PPP sea sensible utilizando this MSDN guide donde la técnica para escalar utiliza píxeles lógicos X e Y desde un contexto de dispositivo.¿Los píxeles no son cuadrados en un monitor?
int _dpiX = 96, _pdiY = 96;
HDC hdc = GetDC(NULL);
if (hdc)
{
_dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
_dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
}
A continuación, puede escalar coordenadas X e Y usando
int ScaleX(int x) { return MulDiv(x, _dpiX, 96); }
int ScaleY(int y) { return MulDiv(y, _dpiY, 96); }
¿Hay siempre una situación en la GetDeviceCaps(hdc, LOGPIXELSX)
y GetDeviceCaps(hdc, LOGPIXELSY)
volvería números diferentes para un monitor. El único dispositivo que realmente me preocupa es un monitor, ¿así que necesito tener funciones separadas ScaleX(int x)
y ScaleY(int y)
? ¿Puedo usar solo una función Scale(int px)
? ¿Habría un inconveniente para hacer esto?
Gracias de antemano por la ayuda.
Hay una gran cantidad de pantallas de plasma por ahí (en su mayoría televisores) que tienen una resolución interna de 1024x768, pero son 16: 9. Google "plasma 1024x768 16: 9" por ejemplos ". Es muy raro encontrar esto en un monitor de computadora, pero si es fácil de programar, ¡sería genial apoyar ese caso! – Chris
@Chris: sospecho que el hardware para una pantalla panorámica de 1024x768 va a aplicar una transformación a un nivel bajo. En el nivel del controlador, se le presentará la ilusión de píxeles cuadrados, tal vez mediante el uso de una pantalla virtual de 1280x720 en una disposición de 16x9, y el hardware debajo el controlador volverá a muestrear los píxeles virtuales cuadrados para producir los píxeles nativos no cuadrados. Dudo que pueda abordar los píxeles nativos no cuadrados directamente en la capa WinAPI. –