Question

J'ai besoin d'un moyen de détecter si le moniteur programatically est large ou non, sous Windows.

GetSystemMetrics retourne la taille du bureau, quel type d'œuvres, mais si un utilisateur dispose d'un écran large, disons, 1024x768, je vais mal le classer comme non à l'échelle.

GetDeviceCaps a des problèmes similaires avec HORZRES et VERTRES, et même HORZSIZE ET VERTSIZE donner des résultats incorrects lorsqu'une résolution non à l'échelle est utilisée dans un large écran.

Est-il possible de détecter ce fiable?

Était-ce utile?

La solution

Vous pourriez être en mesure d'obtenir la taille réelle par EDID. Voir ici: Comment obtenir le bon taille physique du moniteur?

Autres conseils

Voici une meilleure version qui ne plaisante pas avec la EDID ou le registre. Il fait l'hypothèse (qui est à mon humble avis tout à fait exact) que la résolution maximale supportée par l'écran est la meilleure solution native.

DEVMODEA modeInfo;
modeInfo.dmSize = sizeof(DEVMODEA);
modeInfo.dmDriverExtra = NULL;
int modeNum = 0;
int xMax = 0, yMax = 0;
while (EnumDisplaySettingsExA(0, modeNum, &modeInfo, 0)) {
    ++modeNum;
    if (modeInfo.dmPelsWidth > xMax) {
        xMax = modeInfo.dmPelsWidth;
        yMax = modeInfo.dmPelsHeight;
    }
}
cout << "Monitor aspect ratio : " << (double)xMax/yMax << "\n";

Vive.

essayez SystemInformation.PrimaryMonitorSize

La seule chose sensée serait de classer les moniteurs en largeur à proportion de la hauteur. Voilà ce que je vois beaucoup de jeux qui font ces jours-ci.

Si vous pouvez obtenir la largeur, alors vous pouvez probablement obtenir la hauteur. Après cela, la réponse est seulement une petite opération mathématique loin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top