Déterminer la taille d'une fenêtre

Déterminer la taille d'une fenêtre - C++ - Programmation

Marsh Posté le 05-03-2003 à 22:15:05    

Encore moi avec un problème de fenêtres :)
J'utilise la fonction GetWindowRect pour déterminer la taille de ma fenêtre (si jamais l'utilisateur l'agrandit par exemple), pour redessiner mon dessin à l'échelle (pour qu'il prenne tjrs toute la fenêtre).
Donc je vous livre la portion de code que j'utilise :
 

Code :
  1. RECT *lpRect;
  2. if(GetWindowRect(hwnd, lpRect))
  3. {
  4.    *largeur=(*lpRect).right-(*lpRect).left;
  5.    *hauteur=(*lpRect).bottom-(*lpRect).top;
  6. }


 
Alors ça marche pas trop mal, mais de temps en temps, spécialement dans les 2 cas suivants :
- Agrandissement de la fenêtre (taille maximale, avec le bouton en haut à droite)
- Réduction puis réactivation de la fenêtre,
eh ben ça me sort une erreur "L'instruction à ... emploie l'adresse mémoire 0x000000001. La mémoire ne peut pas être written"....
Une idée ? Paske de temps en temps ça marche et de temps en temps non... :??:

Reply

Marsh Posté le 05-03-2003 à 22:15:05   

Reply

Marsh Posté le 05-03-2003 à 22:41:24    

Code :
  1. RECT *lpRect;
  2. if(GetWindowRect(hwnd, lpRect))
  3. {
  4.    *largeur=(*lpRect).right-(*lpRect).left;
  5.    *hauteur=(*lpRect).bottom-(*lpRect).top;
  6. }


 
 
Il faut bien lire la documentation, GetWindowRect n'alloue pas une type RECT, il faut lui passer l'adresse d'une variable existante. Car là, lpRect pointe sur n'importe quoi...
De plus, largeur et hauteur ne sont pas definies dans cette portion de code. Egalement, le code est correct si ce sont des pointeurs sur des entiers (initialises)...
Donc comme ca, ca devrait mieux fonctionner :
 

Code :
  1. RECT Rect;
  2. if(GetWindowRect(hwnd, &Rect))
  3. {
  4.    largeur=Rect.right-Rect.left;
  5.    hauteur=Rect.bottom-Rect.top;
  6. }


 
EDIT: Quand ca fonctionne c'est que lpRect pointe (aléatoirement) sur une zone memoire ou tu as un acces en ecriture. L'inverse lève une exception...


Message édité par Poireau le 05-03-2003 à 22:47:44
Reply

Marsh Posté le 05-03-2003 à 23:17:50    

Ah ok merci bien ça marche.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed