Partager via


Qu’est-ce qu’une fenêtre ?

Qu’est-ce qu’une fenêtre ?

De toute évidence, les fenêtres sont au cœur de Windows. Ils sont si importants qu’ils ont nommé le système d’exploitation après eux. Mais qu’est-ce qu’une fenêtre ? Quand vous pensez à une fenêtre, vous pensez probablement à quelque chose comme ceci :

capture d’écran d’une fenêtre d’application

Ce type de fenêtre est appelé fenêtre d’application ou fenêtre main. Il a généralement un cadre avec une barre de titre, des boutons Réduire et Agrandir , et d’autres éléments d’interface utilisateur standard. Le frame est appelé zone non cliente de la fenêtre, ainsi appelée parce que le système d’exploitation gère cette partie de la fenêtre. La zone dans le cadre est la zone cliente. Il s’agit de la partie de la fenêtre que votre programme gère.

Voici un autre type de fenêtre :

capture d’écran d’une fenêtre de contrôle

Si vous débutez avec la programmation Windows, il peut vous surprendre que les contrôles d’interface utilisateur, tels que les boutons et les zones d’édition, soient eux-mêmes des fenêtres. La principale différence entre un contrôle d’interface utilisateur et une fenêtre d’application est qu’un contrôle n’existe pas en lui-même. Au lieu de cela, le contrôle est positionné par rapport à la fenêtre d’application. Lorsque vous faites glisser la fenêtre d’application, le contrôle se déplace avec elle, comme vous vous y attendiez. En outre, le contrôle et la fenêtre d’application peuvent communiquer entre eux. (Par exemple, la fenêtre d’application reçoit des notifications de clic à partir d’un bouton.)

Par conséquent, lorsque vous pensez fenêtre, ne pensez pas simplement fenêtre d’application. Au lieu de cela, considérez une fenêtre comme une construction de programmation qui :

  • Occupe une certaine partie de l’écran.
  • Peut être visible ou non à un moment donné.
  • Sait se dessiner.
  • Répond aux événements de l’utilisateur ou du système d’exploitation.

Fenêtres parentes et fenêtres propriétaires

Dans le cas d’un contrôle d’interface utilisateur, la fenêtre de contrôle est dite être l’enfant de la fenêtre d’application. La fenêtre d’application est le parent de la fenêtre de contrôle. La fenêtre parente fournit le système de coordonnées utilisé pour positionner une fenêtre enfant. Le fait d’avoir une fenêtre parente affecte certains aspects de l’apparence d’une fenêtre ; par exemple, une fenêtre enfant est découpée afin qu’aucune partie de la fenêtre enfant ne puisse apparaître en dehors des bordures de sa fenêtre parente.

Une autre relation est la relation entre une fenêtre d’application et une fenêtre de dialogue modale. Lorsqu’une application affiche une boîte de dialogue modale, la fenêtre d’application est la fenêtre propriétaire et la boîte de dialogue est une fenêtre propriétaire . Une fenêtre détenue apparaît toujours devant sa fenêtre propriétaire. Il est masqué lorsque le propriétaire est réduit au minimum et est détruit en même temps que le propriétaire.

L’image suivante montre une application qui affiche une boîte de dialogue avec deux boutons :

capture d’écran d’une application avec une boîte de dialogue

La fenêtre d’application est propriétaire de la fenêtre de dialogue et la fenêtre de dialogue est le parent des deux fenêtres de bouton. Le diagramme suivant illustre ces relations :

illustration montrant les relations parent/enfant et propriétaire/propriétaire

Poignées de fenêtre

Windows sont des objets ( ils ont à la fois du code et des données ), mais ils ne sont pas des classes C++. Au lieu de cela, un programme référence une fenêtre à l’aide d’une valeur appelée handle. Un handle est un type opaque. Essentiellement, il s’agit simplement d’un nombre que le système d’exploitation utilise pour identifier un objet. Vous pouvez imaginer Windows comme ayant une grande table de toutes les fenêtres qui ont été créées. Il utilise ce tableau pour rechercher les fenêtres en fonction de leurs handles. (Il n’est pas important de savoir si c’est exactement la façon dont il fonctionne en interne.) Le type de données pour les handles de fenêtre est HWND, qui est généralement prononcé « aitch-wind ». Les descripteurs de fenêtre sont retournés par les fonctions qui créent des fenêtres : CreateWindow et CreateWindowEx.

Pour effectuer une opération sur une fenêtre, vous devez généralement appeler une fonction qui prend une valeur HWND en tant que paramètre. Par exemple, pour repositionner une fenêtre à l’écran, appelez la fonction MoveWindow :

BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);

Le premier paramètre est le handle de la fenêtre que vous souhaitez déplacer. Les autres paramètres spécifient le nouvel emplacement de la fenêtre et indiquent si la fenêtre doit être redessinée.

Gardez à l’esprit que les handles ne sont pas des pointeurs. Si hwnd est une variable qui contient un handle, la tentative de déréférencement du handle en écrivant *hwnd est une erreur.

Coordonnées de l’écran et de la fenêtre

Les coordonnées sont mesurées en pixels indépendants de l’appareil. Nous aurons plus à dire sur la partie indépendante de l’appareil des pixels indépendants de l’appareil lorsque nous aborderons les graphiques.

Selon votre tâche, vous pouvez mesurer les coordonnées par rapport à l’écran, par rapport à une fenêtre (y compris le cadre) ou par rapport à la zone cliente d’une fenêtre. Par exemple, vous placez une fenêtre à l’écran à l’aide de coordonnées d’écran, mais vous dessinez à l’intérieur d’une fenêtre à l’aide de coordonnées clientes. Dans chaque cas, l’origine (0, 0) est toujours le coin supérieur gauche de la région.

illustration montrant les coordonnées de l’écran, de la fenêtre et du client

Suivant

WinMain : point d’entrée de l’application