Récupérer résolution [Résolu]

Signaler
-
 Stenograf -
Bonsoir,

J'aimerai savoir si il est possible en C/C++ de récupérer la résolution de l'écran
pour ensuite l'afficher dans un MessageBox ?

Merci d'avance.

7 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
8
Tu peux par exemple utiliser wsprintf() pour former le message à afficher avec MessageBox():
char buffer[256];
int largeur=GetSystemMetrics(SM_CXSCREEN);
int hauteur=GetSystemMetrics(SM_CYSCREEN);
wsprintf(buffer,"Votre résolution est de %u*%u",largeur,hauteur);
MessageBox(0,buffer,"Résolution",0);
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
8
Salut,
Sous Windows, tu peux utiliser GetSystemMetrics() comme ceci:
int largeur=GetSystemMetrics(SM_CXSCREEN);
int hauteur=GetSystemMetrics(SM_CYSCREEN);

Il y'a aussi GetDeviceCaps comme ceci:
HDC hdc=GetDC(0);
int largeur=GetDeviceCaps(hdc, HORZRES);
int hauteur=GetDeviceCaps(hdc, VERTRES);

Si tu veux dire par résolution le nombre de points par pouce tu fais comme ceci:
HDC hdc=GetDC(0);
int resverticale=GetDeviceCaps(hdc, LOGPIXELSX);
int reshorizontale=GetDeviceCaps(hdc, LOGPIXELSY);
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
8
Je viens de relire ma réponse. J'ai fait une petite erreur dans le dernier exemple. J'ai inversé les noms des variables. Voici l'exemple corrigé:
HDC hdc=GetDC(0);
int reshorizontale=GetDeviceCaps(hdc, LOGPIXELSX);
int resverticale=GetDeviceCaps(hdc, LOGPIXELSY);
A ne pas oublier également d'utiliser ReleaseDC() à la fin pour libérer le HDC:
ReleaseDC(0,hdc); 
Merci racpp, cependant je ne sais pas trop comment envoyer l'information dans un MessageBox.

Exemple : Votre résolution est 1024*768.

Comme je débute, c'est plutôt normal.

Je vais torturer mon compilo avec des essais, je verrais bien.

Merci pour ta réponse.
Comme ça, Je me coucherais moins c.. ce soir.

Bon, si j'ai bien compris printf mode console et wsprintf mode GUI ?

Dans :
Tu peux par exemple utiliser wsprintf()


Tu sous-entends par là que ça n'est pas la seule possibilité...
wsprintf() n'est donc pas le seul moyen pour afficher la valeur si j'ai bien compris.

Que veux-tu, j'aime comprendre, mais je sais aussi que je peux me tromper dans mes suppositions.
C'est ça les gros débutants.

Merci encore racpp.

Excellente après-midi.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
8
printf = mode console et wsprintf = mode GUI ?

Non pas du tout.
wsprintf() sert à préparer, dans un buffer, la chaine de caractères à afficher avec MessageBox() dans l'exemple. C'est un équivalent de sprintf() qui permet, justement, de former une chaine de caractères dans un buffer à partir de différents paramètres. Elle ressemble à printf() mais au lieu d'afficher le texte formaté à l'écran, elle le met dans un buffer qu'on pourra utiliser par la suite.
J'ai choisi wsprintf() pour simplicité de code car sinon, on aura besoin de définir une chaine initiale, convertir les variables en chaines et concaténer le tout.
En mode GUI, on affiche du texte sur un contrôle (bouton, static, edit etc) en utilisant la fonction SetWindowText().
Ce que je voulais dire par là, c'est que si on aurait voulu se servir de printf seulement,
il n'aurait pas été possible (enfin je pense) de récupérer la chaine dans un MessageBox.

D'où ma déduction (maladroite j'en conviens) : printf mode console et wsprintf mode GUI

Mais là encore, je n'affirme rien (ça risque pas).

Merci en tout cas pour ton explication claire, même si je n'aurai pas été contre un bref aperçu
de ton autre exemple...

On aura besoin de définir une chaine initiale, convertir les variables en chaines et concaténer le tout.


J'aime comprendre et j'adore l'API (WIN32 seulement).

En tout cas je peux te dire que si les informations/réponses sur la toile pouvaient êtres
aussi claires que les tiennes, le temps de gagné serait conséquent.

Merci encore.