Quelle est la différence entre GetClientRect et Getwindowrect dans WinApi?

Que dois-je utiliser dans InvalidateRect pour actualiser ma fenêtre? Et pourquoi?

21
demandé sur Abzac 2011-09-27 00:41:27

4 réponses

La fenêtre rect inclut la zone non-client, c'est-à-dire les bordures de fenêtre, la barre de légende, etc. Le client rect ne le fait pas.

GetWindowRect renvoie un rect dans les coordonnées de l'écran alors que GetClientRect renvoie un rect dans les coordonnées du client.

InvalidateRect reçoit un rect en coordonnées client. Si vous souhaitez invalider toute votre zone client, passez NULL à InvalidateRect. Vous pouvez passer dans le rect retourné par GetClientRect, mais il est beaucoup plus simple et plus clair de passe NULL.

42
répondu David Heffernan 2017-02-18 19:23:29

GetClientRect obtient les coordonnées de la zone client de la fenêtre. Plus précisément c'est la zone dans la fenêtre de chrome et de exclut l'en-tête etc. Un des commentaires sur la page MSDN résume assez bien:

Je dirais que cette fonction renvoie la taille de la zone à laquelle je peux rendre.

GetWindowsRect obtient les coordonnées de toute la fenêtre. Ce inclut l'en-tête, la barre d'état etc. Cependant, selon un commentaire sur le Page MSDN

Les applications sous Vista qui ne sont pas liées à WINVER = 6 recevront ici un ensemble de valeurs trompeuses, qui ne tiennent pas compte du remplissage supplémentaire de pixels "verre" Vista Aero s'applique à la fenêtre.

Donc, à moins que cela n'ait été corrigé pour Windows 7, vérifiez le résultat que vous obtenez et assurez-vous d'avoir la valeur correcte de WINVER.

11
répondu ChrisF 2011-09-26 20:45:36

Une explication très simple est que GetWindowRect() Vous donne le rectangle qui inclut les bordures de la fenêtre. GetClientRect() vous donne le rectangle qui exclut les bordures - la zone qui est allouée au dessin spécifique à la fenêtre.

Veuillez noter que GetWindowRect() renvoie un rectangle en coordonnées d'écran-coordonnées relatives à l'écran/moniteur. GetClientRect() renvoie un rectangle relatif à lui-même.

9
répondu Jörgen Sigvardsson 2011-09-26 20:53:50

À Partir de MSDN:
GetWindowRect
Récupère les dimensions du rectangle de délimitation de la fenêtre spécifiée. Les dimensions sont données en coordonnées d'écran relatives au coin supérieur gauche de l'écran.

GetClientRect
Récupère les coordonnées de l'espace client d'une fenêtre. Les coordonnées client spécifient les coins supérieur gauche et inférieur droit de la zone client. Parce que les coordonnées du client sont relatives au coin supérieur gauche d'une fenêtre espace client, les coordonnées du coin supérieur gauche sont (0,0).

Plus : Client rect n'inclut pas la barre de titre, les bordures, les barres de défilement, la barre d'état...

6
répondu Marco 2011-09-26 20:44:45