c++ - Quelle est la différence entre GetClientRect et GetWindowRect dans WinApi?



windows gdi (3)

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 de la fenêtre.

Veuillez noter que GetWindowRect() renvoie un rectangle dans les coordonnées de l'écran - les coordonnées qui sont relatives à l'écran / au moniteur. GetClientRect() renvoie un rectangle qui lui est relatif.

https://ffff65535.com

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


GetClientRect obtient les coordonnées de la zone client de la fenêtre. Plus précisément, il s'agit de la zone à l' intérieur de la fenêtre chrome et 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 que je peux rendre.

GetWindowsRect obtient les coordonnées de la fenêtre entière. Cela inclut l'en-tête, la barre d'état, etc. Cependant, selon un commentaire sur la 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 rembourrage supplémentaire des pixels «en verre» que Vista Aero applique à la fenêtre.

Donc, sauf si cela a été corrigé pour Windows 7, vérifiez le résultat obtenu et assurez-vous que vous avez la bonne valeur de WINVER .


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 dans les coordonnées de l'écran qui sont relatives au coin supérieur gauche de l'écran.

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

Plus : client rect ne comprend pas la barre de titre, les bordures, les barres de défilement, la barre d'état ...





gdi