10

Estoy escribiendo un juego de pantalla completa en 3D y he creado un menú en el que el usuario puede seleccionar la resolución de pantalla para que coincida con su capacidad de hardware.Distinga entre modos de paneo y pantalla normal en el código - Windows

estoy enumerando todos los modos de pantalla disponibles con EnumDisplaySettingsExA como esto:

std::vector<DEVMODEA> modes; 
DEVMODEA modeInfo; 
int modeNum = -1; 
while (EnumDisplaySettingsExA(0, ++modeNum, &modeInfo, 0)) { 
    if (modeInfo.dmBitsPerPel < 16) continue; 
    modes.push_back(modeInfo); 
} 

El problema es que estoy recibiendo paneo-modos, así! No puedo distinguir cuáles son cuáles; por ejemplo, mi laptop ATI tiene un modo normal máximo de 1280x800, ¡pero también contiene un modo de panoramización de 1024x600!

¿Alguien sabe de una manera de distinguir entre los 2, por lo que puedo rechazar los modos de panorámica de mi menú?

+2

Por cierto, los campos dmPanningWidth y Height de DEVMODEA son inútiles, siempre devuelven 0. –

+0

¿Qué quiere decir con "panning-mode"? Cuando EnumDisplaySettingsEx devuelve 1024x600, eso significa que el usuario de Windows puede cambiar la configuración de visualización de video a esa resolución, y el monitor probablemente también lo respalde. –

+2

@Chris: se refiere a una resolución que no es compatible con el monitor, generalmente porque es demasiado grande, pero es emulada por la tarjeta gráfica al mostrar solo una parte del escritorio en la pantalla a la vez; mover el mouse al borde de la pantalla lo "desplazará" para mostrar otras partes del escritorio. –

Respuesta

1

@Martin: Supongo que el OP acaba de poner las res en el orden incorrecto.

¿Cuál es this link qué es lo que está buscando?

Parece que es la forma correcta de obtener las dimensiones en píxeles de una pantalla en Windows.

+0

Esta es una función .NET. No se puede encontrar el equivalente para C++ ... –

+0

@Bill Kotsias: esta función utiliza las funciones subyacentes de los monitores de Windows, como EnumDisplayMonitors, GetMonitorInfo o MonitorForWindow, pero no estoy seguro de que te sirva de ayuda. –

Cuestiones relacionadas