Comment puis-je à partir de Winapi (en C ou C++) détecter la résolution d'écran actuelle?
Quelques antécédents:
Je veux démarrer une nouvelle fenêtre plein écran OpenGL, mais je veux qu'elle s'ouvre avec la même taille horizontale et verticale que celle sur laquelle le bureau est déjà configuré. (Maintenant, quand tout le monde utilise LCD, j'ai pensé que c'était la meilleure façon d'obtenir la résolution native de l'écran.)
Je n'ai pas désespérément besoin de connaître également la profondeur de couleur du bureau, bien que ce soit un bon bonus.
Edit: Il est important de se rappeler qu'un moniteur ne "commence" pas toujours à 0x0, donc il ne suffit pas de connaître la taille pour positionner votre fenêtre. Vous pouvez utiliser MonitorFromWindow pour trouver le moniteur sur lequel se trouve votre fenêtre, puis appeler GetMonitorInfo
Si vous souhaitez emprunter la route de bas niveau ou modifier la résolution dont vous avez besoin pour utiliser EnumDisplayDevices, EnumDisplaySettings et ChangeDisplaySettings (C'est le seul moyen d'obtenir le taux de rafraîchissement AFAIK, mais GetDeviceCaps vous indiquera la profondeur de couleur)
Lorsque le système utilise virtualisation DPI (Vista et supérieur) à l'aide de GetSystemMetrics ou GetWindowRect échouera pour obtenir la résolution d'écran réelle (vous obtenir la résolution virtuelle) sauf si vous avez créé DPI Aware Application .
Donc, la meilleure option ici (simple et rétrocompatible) est d'utiliser EnumDisplaySettings avec ENUM_CURRENT_SETTINGS.
C'est GetSystemMetrics avec ces paramètres:
SM_CXSCREEN <largeur
SM_CYSCREEN <hauteur
Comme il est dit (SM_CXSCREEN):
Largeur de l'écran du moniteur d'affichage principal, en pixels. Il s'agit de la même valeur obtenue en appelant GetDeviceCaps comme suit: GetDeviceCaps (hdcPrimaryMonitor, HORZRES).
Je pense que SystemParametersInfo pourrait être utile.
Edit: Regardez également GetMonitorInfo .
Exemple MFC Prise en charge de plusieurs moniteurs avec GetSystemMetrics EnumDisplayMonitors et GetMonitorInfo
Suivez ce lien: Surveiller l'énumération avec le code source
Supprimé il y a environ une semaine, puis modifié le 3-4-13.
En voici un bon pour les situations où l'utilisateur a décidé d'exécuter son bureau dans une résolution inférieure (mauvaise idée) ou les cas de coin où une personne a décidé d'obtenir un moniteur dont son contrôleur graphique ne pouvait pas tirer pleinement parti:
// get actual size of desktop
RECT actualDesktop;
GetWindowRect(GetDesktopWindow(), &actualDesktop);
J'utilise la fonction GetSystemMetrics
GetSystemMetrics (SM_CXSCREEN) renvoie la largeur d'écran (en pixels)
GetSystemMetrics (SM_CYSCREEN) - hauteur en pixels
https://msdn.Microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx