Pourquoi un formulaire Delphi agrandi de 8 pixels plus large et supérieur aux valeurs GetSystemMesortingcs?

Si je maximise un formulaire Delphi, les valeurs de largeur et de hauteur sont supérieures de 8 pixels à celles de GetSystemMesortingcs SM_CXSCREEN et SM_CYSCREEN correspondantes?

Par exemple:

Lorsque je clique avec le bouton droit de la souris sur mon écran et que j’obtiens des propriétés, la résolution de l’écran est de 1680 X 1050. Ce sont les mêmes valeurs renvoyées par GetSystemMesortingcs (SM_CXSCREEN) et GetSystemMesortingcs (SM_CYSCREEN).

Lorsque je maximise le formulaire dans mon application Delphi, je reçois une largeur de 1688 et une hauteur de 1058. Il y a une différence de 8 pixels. Qu’est-ce qui cause cette différence?

Lorsque les fenêtres maximisées ont été initialement implémentées, les concepteurs ont voulu supprimer les bordures de redimensionnement. Plutôt que de les supprimer, ils ont plutôt décidé de dessiner ces frontières au-delà des bords de l’écran, où ils ne seraient pas visibles. D’où le rectangle de fenêtre plutôt surprenant d’une fenêtre agrandie.

Cette décision de mise en œuvre est devenue problématique avec l’avènement des systèmes multi-moniteurs. À ce moment-là, certaines applications reposaient sur ce comportement et l’équipe Windows a donc décidé de conserver ce comportement pour des raisons de compatibilité. Cela signifiait que les fenêtres maximisées fuyaient sur les écrans voisins. Avec le temps, le gestionnaire de fenêtres a acquis des capacités qui lui ont permis de supprimer cette fuite.

Raymond Chen , comme d’habitude, a un article qui couvre les détails: Pourquoi une fenêtre agrandie a-t-elle un rectangle de fenêtre incorrect?

J’ai écrit un programme simple, qui attrape WM_GETMINMAXINFO . Ce message permet de modifier la position et la taille de la fenêtre maximisée avant que la maximisation proprement dite ait lieu. Les valeurs par défaut fournies par le système étaient les suivantes:

 Position.x: -8 Position.y: -8 Size.x: 1456 (= 8 + width of screen + 8) Size.y: 916 (= 8 + height of screen + 8) 

La résolution de mon écran est 1440×900.

Il semble que Windows positionne la fenêtre après la maximisation de telle manière que l’espace client couvre au maximum l’espace disponible et que le chrome de la fenêtre soit masqué en dehors de la zone de l’écran.