À propos de Windows

Cette rubrique décrit les éléments de programmation que les applications utilisent pour créer et utiliser des fenêtres ; gérer les relations entre les fenêtres ; et dimensionner, déplacer et afficher les fenêtres.

La vue d’ensemble comprend les rubriques suivantes.

Fenêtre du bureau

Lorsque vous démarrez le système, il crée automatiquement la fenêtre du bureau. La fenêtre de bureau est une fenêtre définie par le système qui peint l’arrière-plan de l’écran et sert de base pour toutes les fenêtres affichées par toutes les applications.

La fenêtre de bureau utilise une bitmap pour peindre l’arrière-plan de l’écran. Le modèle créé par la bitmap est appelé papier peint du bureau. Par défaut, la fenêtre de bureau utilise la bitmap d’un fichier .bmp spécifié dans le Registre comme papier peint du bureau.

La fonction GetDesktopWindow retourne un handle à la fenêtre de bureau.

Une application de configuration système, telle qu’un élément Panneau de configuration, modifie le papier peint du bureau à l’aide de la fonction SystemParametersInfo avec le paramètre wAction défini sur SPI_SETDESKWALLPAPER et le paramètre lpvParam spécifiant un nom de fichier bitmap. SystemParametersInfo charge ensuite la bitmap à partir du fichier spécifié, utilise la bitmap pour peindre l’arrière-plan de l’écran et entre le nouveau nom de fichier dans le Registre.

Fenêtres d’application

Chaque application graphique Windows crée au moins une fenêtre, appelée fenêtre main, qui sert d’interface principale entre l’utilisateur et l’application. La plupart des applications créent également d’autres fenêtres, directement ou indirectement, pour effectuer des tâches liées à la fenêtre main. Chaque fenêtre joue un rôle dans l’affichage de la sortie et la réception des entrées de l’utilisateur.

Lorsque vous démarrez une application, le système associe également un bouton de barre des tâches à l’application. Le bouton de la barre des tâches contient l’icône et le titre du programme. Lorsque l’application est active, son bouton de barre des tâches s’affiche dans l’état poussé.

Une fenêtre d’application comprend des éléments tels qu’une barre de titre, une barre de menus, le menu de la fenêtre (anciennement le menu système), le bouton réduire, le bouton agrandir, le bouton restaurer, le bouton fermer, une bordure de dimensionnement, une zone cliente, une barre de défilement horizontale et une barre de défilement verticale. La fenêtre main d’une application inclut généralement tous ces composants. L’illustration suivante montre ces composants dans une fenêtre main classique.

fenêtre standard

Zone cliente

La zone cliente est la partie d’une fenêtre dans laquelle l’application affiche une sortie, telle que du texte ou des graphiques. Par exemple, une application de publication de bureau affiche la page active d’un document dans la zone cliente. L’application doit fournir une fonction, appelée procédure de fenêtre, pour traiter l’entrée dans la fenêtre et afficher la sortie dans la zone cliente. Pour plus d’informations, consultez Window Procedures.

Zone non cliente

La barre de titre, la barre de menus, le menu de la fenêtre, les boutons réduire et agrandir, la bordure de dimensionnement et les barres de défilement sont collectivement appelés zone non cliente de la fenêtre. Le système gère la plupart des aspects de la zone non cliente ; l’application gère l’apparence et le comportement de sa zone cliente.

La barre de titre affiche une icône et une ligne de texte définies par l’application ; en règle générale, le texte spécifie le nom de l’application ou indique l’objectif de la fenêtre. Une application spécifie l’icône et le texte lors de la création de la fenêtre. La barre de titre permet également à l’utilisateur de déplacer la fenêtre à l’aide d’une souris ou d’un autre dispositif de pointage.

La plupart des applications incluent une barre de menus qui répertorie les commandes prises en charge par l’application. Les éléments de la barre de menus représentent les catégories de commandes main. Cliquer sur un élément dans la barre de menus ouvre généralement un menu contextuel dont les éléments correspondent aux tâches d’une catégorie donnée. En cliquant sur une commande, l’utilisateur indique à l’application d’effectuer une tâche.

Le menu de la fenêtre est créé et géré par le système. Il contient un ensemble standard d’éléments de menu qui, lorsque l’utilisateur le choisit, définit la taille ou la position d’une fenêtre, ferme l’application ou effectue des tâches. Pour plus d’informations, consultez Menus.

Les boutons dans le coin supérieur droit affectent la taille et la position de la fenêtre. Lorsque vous cliquez sur le bouton Agrandir, le système agrandit la fenêtre à la taille de l’écran et positionne la fenêtre, de sorte qu’elle couvre l’ensemble du bureau, moins la barre des tâches. Dans le même temps, le système remplace le bouton agrandir par le bouton de restauration. Lorsque vous cliquez sur le bouton de restauration, le système restaure la fenêtre à sa taille et à sa position précédentes. Lorsque vous cliquez sur le bouton Réduire, le système réduit la fenêtre à la taille de son bouton de barre des tâches, positionne la fenêtre sur le bouton de la barre des tâches et affiche le bouton de la barre des tâches dans son état normal. Pour restaurer la taille et la position précédentes de l’application, cliquez sur son bouton de barre des tâches. Lorsque vous cliquez sur le bouton fermer, l’application se ferme.

La bordure de dimensionnement est une zone autour du périmètre de la fenêtre qui permet à l’utilisateur de dimensionner la fenêtre à l’aide d’une souris ou d’un autre dispositif de pointage.

La barre de défilement horizontale et la barre de défilement verticale convertissent l’entrée de la souris ou du clavier en valeurs qu’une application utilise pour déplacer le contenu de la zone cliente horizontalement ou verticalement. Par exemple, une application de traitement de texte qui affiche un document long fournit généralement une barre de défilement verticale pour permettre à l’utilisateur de parcourir le document.

Contrôles et boîtes de dialogue

Une application peut créer plusieurs types de fenêtres en plus de sa fenêtre main, notamment des contrôles et des boîtes de dialogue.

Un contrôle est une fenêtre qu’une application utilise pour obtenir des informations spécifiques de l’utilisateur, telles que le nom d’un fichier à ouvrir ou la taille de point souhaitée d’une sélection de texte. Les applications utilisent également des contrôles pour obtenir les informations nécessaires pour contrôler une fonctionnalité particulière d’une application. Par exemple, une application de traitement de texte fournit généralement un contrôle permettant à l’utilisateur d’activer et de désactiver l’habillage des mots. Pour plus d’informations, consultez Contrôles Windows.

Les contrôles sont toujours utilisés conjointement avec une autre fenêtre, généralement une boîte de dialogue. Une boîte de dialogue est une fenêtre qui contient un ou plusieurs contrôles. Une application utilise une boîte de dialogue pour inviter l’utilisateur à entrer l’entrée nécessaire à l’exécution d’une commande. Par exemple, une application qui inclut une commande permettant d’ouvrir un fichier affiche une boîte de dialogue qui inclut des contrôles dans lesquels l’utilisateur spécifie un chemin d’accès et un nom de fichier. Les boîtes de dialogue n’utilisent généralement pas le même ensemble de composants de fenêtre qu’une fenêtre main. La plupart ont une barre de titre, un menu fenêtre, une bordure (sans dimensionnement) et une zone cliente, mais ils n’ont généralement pas de barre de menus, de boutons de réduction et d’agrandissement, ni de barres de défilement. Pour plus d’informations, consultez Boîtes de dialogue.

Une boîte de message est une boîte de dialogue spéciale qui affiche une note, une mise en garde ou un avertissement à l’utilisateur. Par exemple, une boîte de message peut informer l’utilisateur d’un problème rencontré par l’application lors de l’exécution d’une tâche. Pour plus d’informations, consultez Boîtes de messages.

Attributs de fenêtre

Une application doit fournir les informations suivantes lors de la création d’une fenêtre. (À l’exception du handle de fenêtre, que la fonction de création retourne pour identifier la nouvelle fenêtre de manière unique.)

Ces attributs de fenêtre sont décrits dans les sections suivantes.

Nom de la classe

Chaque fenêtre appartient à une classe de fenêtre. Une application doit inscrire une classe window avant de créer des fenêtres de cette classe. La classe window définit la plupart des aspects de l’apparence et du comportement d’une fenêtre. Le composant principal d’une classe de fenêtre est la procédure window, une fonction qui reçoit et traite toutes les entrées et demandes envoyées à la fenêtre. Le système fournit les entrées et les demandes sous forme de messages. Pour plus d’informations, consultez Classes de fenêtre, Procédures de fenêtre et Messages et Files d’attente de messages.

Nom de fenêtre

Un nom de fenêtre est une chaîne de texte qui identifie une fenêtre pour l’utilisateur. Une fenêtre main, une boîte de dialogue ou une boîte de message affiche généralement son nom de fenêtre dans sa barre de titre, le cas échéant. Un contrôle peut afficher son nom de fenêtre, en fonction de la classe du contrôle. Par exemple, les boutons, les contrôles de modification et les contrôles statiques affichent leurs noms de fenêtre dans le rectangle occupé par le contrôle. Toutefois, les contrôles tels que les zones de liste et les zones de liste déroulante n’affichent pas leurs noms de fenêtre.

Pour modifier le nom de la fenêtre après avoir créé une fenêtre, utilisez la fonction SetWindowText . Cette fonction utilise les fonctions GetWindowTextLength et GetWindowText pour récupérer la chaîne de nom de fenêtre actuelle à partir de la fenêtre.

Style de la fenêtre

Chaque fenêtre a un ou plusieurs styles de fenêtre. Un style de fenêtre est une constante nommée qui définit un aspect de l’apparence et du comportement de la fenêtre qui n’est pas spécifié par la classe de la fenêtre. Une application définit généralement des styles de fenêtre lors de la création de fenêtres. Il peut également définir les styles après la création d’une fenêtre à l’aide de la fonction SetWindowLong .

Le système et, dans une certaine mesure, la procédure de fenêtre pour la classe, interprètent les styles de fenêtre.

Certains styles de fenêtre s’appliquent à toutes les fenêtres, mais la plupart s’appliquent aux fenêtres de classes de fenêtres spécifiques. Les styles de fenêtre généraux sont représentés par des constantes qui commencent par le préfixe WS_ ; ils peuvent être combinés avec l’opérateur OR pour former différents types de fenêtres, y compris les fenêtres main, les boîtes de dialogue et les fenêtres enfants. Les styles de fenêtre spécifiques à la classe définissent l’apparence et le comportement des fenêtres appartenant aux classes de contrôle prédéfinies. Par exemple, la classe SCROLLBAR spécifie un contrôle de barre de défilement, mais les styles SBS_HORZ et SBS_VERT déterminent si un contrôle de barre de défilement horizontal ou vertical est créé.

Pour obtenir la liste des styles qui peuvent être utilisés par Windows, consultez les rubriques suivantes :

Style de fenêtre étendu

Chaque fenêtre peut éventuellement avoir un ou plusieurs styles de fenêtre étendus. Un style de fenêtre étendu est une constante nommée qui définit un aspect de l’apparence et du comportement de la fenêtre qui n’est pas spécifié par la classe de fenêtre ou les autres styles de fenêtre. Une application définit généralement des styles de fenêtre étendus lors de la création de fenêtres. Il peut également définir les styles après la création d’une fenêtre à l’aide de la fonction SetWindowLong .

Pour plus d’informations, consultez CreateWindowEx.

Position

La position d’une fenêtre est définie comme les coordonnées de son coin supérieur gauche. Ces coordonnées, parfois appelées coordonnées de fenêtre, sont toujours relatives au coin supérieur gauche de l’écran ou, pour une fenêtre enfant, au coin supérieur gauche de la zone cliente de la fenêtre parente. Par exemple, une fenêtre de niveau supérieur ayant les coordonnées (10,10) est placée 10 pixels à droite du coin supérieur gauche de l’écran et 10 pixels vers le bas. Une fenêtre enfant avec les coordonnées (10,10) est placée à 10 pixels à droite du coin supérieur gauche de la zone cliente de sa fenêtre parente et à 10 pixels vers le bas.

La fonction WindowFromPoint récupère un handle de la fenêtre occupant un point particulier à l’écran. De même, les fonctions ChildWindowFromPoint et ChildWindowFromPointEx récupèrent un handle dans la fenêtre enfant occupant un point particulier dans la zone cliente de la fenêtre parente. Bien que ChildWindowFromPointEx puisse ignorer les fenêtres enfants invisibles, désactivées et transparentes, ChildWindowFromPoint ne peut pas.

Taille

La taille d’une fenêtre (largeur et hauteur) est donnée en pixels. Une fenêtre peut avoir une largeur ou une hauteur nulle. Si une application définit la largeur et la hauteur d’une fenêtre sur zéro, le système définit la taille sur la taille de fenêtre minimale par défaut. Pour découvrir la taille minimale de fenêtre par défaut, une application utilise la fonction GetSystemMetrics avec les indicateurs SM_CXMIN et SM_CYMIN .

Une application peut avoir besoin de créer une fenêtre avec une zone cliente d’une taille particulière. Les fonctions AdjustWindowRect et AdjustWindowRectEx calculent la taille requise d’une fenêtre en fonction de la taille souhaitée de la zone cliente. L’application peut passer les valeurs de taille obtenues à la fonction CreateWindowEx .

Une application peut dimensionner une fenêtre de sorte qu’elle soit extrêmement grande ; toutefois, il ne doit pas dimensionner une fenêtre afin qu’elle soit plus grande que l’écran. Avant de définir la taille d’une fenêtre, l’application doit case activée la largeur et la hauteur de l’écran à l’aide de GetSystemMetrics avec les indicateurs SM_CXSCREEN et SM_CYSCREEN.

Handle de fenêtre parent ou propriétaire

Une fenêtre peut avoir une fenêtre parente. Une fenêtre qui a un parent est appelée fenêtre enfant. 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 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 fenêtre qui n’a pas de parent, ou dont le parent est la fenêtre de bureau, est appelée fenêtre de niveau supérieur. Une application peut utiliser la fonction EnumWindows pour obtenir un handle pour chaque fenêtre de niveau supérieur à l’écran. EnumWindows transmet le handle à chaque fenêtre de niveau supérieur, à son tour à une fonction de rappel définie par l’application, EnumWindowsProc.

Une fenêtre de niveau supérieur peut posséder une autre fenêtre ou en être propriétaire. Une fenêtre appartenant apparaît toujours devant sa fenêtre propriétaire, est masquée lorsque sa fenêtre propriétaire est réduite et est détruite lorsque sa fenêtre propriétaire est détruite. Pour plus d’informations, consultez Windows possédé.

Une fenêtre enfant peut avoir un identificateur de fenêtre enfant , une valeur unique définie par l’application associée à la fenêtre enfant. Les identificateurs de fenêtre enfant sont particulièrement utiles dans les applications qui créent plusieurs fenêtres enfants. Lors de la création d’une fenêtre enfant, une application spécifie l’identificateur de la fenêtre enfant. Après avoir créé la fenêtre, l’application peut modifier l’identificateur de la fenêtre à l’aide de la fonction SetWindowLong ou récupérer l’identificateur à l’aide de la fonction GetWindowLong .

Chaque fenêtre, à l’exception d’une fenêtre enfant, peut avoir un menu. Une application peut inclure un menu en fournissant un handle de menu lors de l’inscription de la classe de la fenêtre ou lors de la création de la fenêtre.

Handle d’instance d’application

Un handle instance est associé à chaque application. Le système fournit le handle instance à une application au démarrage de l’application. Étant donné qu’il peut exécuter plusieurs copies de la même application, le système utilise instance handles en interne pour distinguer une instance d’une application d’une autre. L’application doit spécifier le instance gérer dans de nombreuses fenêtres différentes, y compris celles qui créent des fenêtres.

Données de création

Des données de création définies par l’application peuvent être associées à chaque fenêtre. Lors de la première création de la fenêtre, le système transmet un pointeur vers les données sur la procédure de fenêtre de la fenêtre en cours de création. La procédure de fenêtre utilise les données pour initialiser des variables définies par l’application.

Handle de la fenêtre

Après avoir créé une fenêtre, la fonction de création retourne un handle de fenêtre qui identifie la fenêtre de manière unique. Un handle de fenêtre a le type de données HWND ; une application doit utiliser ce type lors de la déclaration d’une variable qui contient un handle de fenêtre. Une application utilise ce handle dans d’autres fonctions pour diriger ses actions vers la fenêtre.

Une application peut utiliser la fonction FindWindow pour déterminer si une fenêtre avec le nom de classe ou le nom de fenêtre spécifié existe dans le système. Si une telle fenêtre existe, FindWindow retourne un handle à la fenêtre. Pour limiter la recherche aux fenêtres enfants d’une application particulière, utilisez la fonction FindWindowEx .

La fonction IsWindow détermine si un handle de fenêtre identifie une fenêtre existante valide. Il existe des constantes spéciales qui peuvent remplacer un handle de fenêtre dans certaines fonctions. Par exemple, une application peut utiliser HWND_BROADCAST dans les fonctions SendMessage et SendMessageTimeout , ou HWND_DESKTOP dans la fonction MapWindowPoints .

Création de fenêtres

Pour créer des fenêtres d’application, utilisez la fonction CreateWindow ou CreateWindowEx . Vous devez fournir les informations nécessaires pour définir les attributs de la fenêtre. CreateWindowEx a un paramètre, dwExStyle, que CreateWindow n’a pas ; sinon, les fonctions sont identiques. En fait, CreateWindow appelle simplement CreateWindowEx avec le paramètre dwExStyle défini sur zéro. Pour cette raison, le reste de cette vue d’ensemble fait uniquement référence à CreateWindowEx.

Cette section contient les rubriques suivantes :

Notes

Il existe d’autres fonctions pour créer des fenêtres à usage spécial, telles que des boîtes de dialogue et des boîtes de message. Pour plus d’informations, consultez DialogBox, CreateDialog et MessageBox.

 

Création de fenêtre principale

Chaque application Windows doit avoir WinMain comme fonction de point d’entrée. WinMain effectue un certain nombre de tâches, notamment l’inscription de la classe window pour la fenêtre main et la création de la fenêtre main. WinMain inscrit la classe de fenêtre main en appelant la fonction RegisterClass et crée la fenêtre main en appelant la fonction CreateWindowEx.

Votre fonction WinMain peut également limiter votre application à une seule instance. Créez un mutex nommé à l’aide de la fonction CreateMutex . Si GetLastError retourne ERROR_ALREADY_EXISTS, un autre instance de votre application existe (il a créé le mutex) et vous devez quitter WinMain.

Le système n’affiche pas automatiquement la fenêtre main après l’avoir créée ; au lieu de cela, une application doit utiliser la fonction ShowWindow pour afficher la fenêtre main. Après avoir créé la fenêtre main, la fonction WinMain de l’application appelle ShowWindow, en lui transmettant deux paramètres : un handle à la fenêtre main et un indicateur spécifiant si la fenêtre main doit être réduite ou agrandie lors de sa première affichage. Normalement, l’indicateur peut être défini sur n’importe quelle constante commençant par le préfixe SW_. Toutefois, lorsque ShowWindow est appelé pour afficher la fenêtre main de l’application, l’indicateur doit être défini sur SW_SHOWDEFAULT. Cet indicateur indique au système d’afficher la fenêtre comme indiqué par le programme qui a démarré l’application.

Si une classe de fenêtre a été inscrite avec la version Unicode de RegisterClass, la fenêtre ne reçoit que des messages Unicode. Pour déterminer si une fenêtre utilise le jeu de caractères Unicode ou non, appelez IsWindowUnicode.

messages Window-Creation

Lors de la création d’une fenêtre, le système envoie des messages à la procédure de fenêtre pour la fenêtre. Le système envoie le message WM_NCCREATE après avoir créé la zone non cliente de la fenêtre et le message WM_CREATE après avoir créé la zone cliente. La procédure de fenêtre reçoit les deux messages avant que le système n’affiche la fenêtre. Les deux messages incluent un pointeur vers une structure CREATESTRUCT qui contient toutes les informations spécifiées dans la fonction CreateWindowEx . En règle générale, la procédure de fenêtre effectue des tâches d’initialisation lors de la réception de ces messages.

Lors de la création d’une fenêtre enfant, le système envoie le message WM_PARENTNOTIFY à la fenêtre parente après l’envoi des messages WM_NCCREATE et WM_CREATE . Il envoie également d’autres messages lors de la création d’une fenêtre. Le nombre et l’ordre de ces messages dépendent de la classe et du style de la fenêtre et de la fonction utilisée pour créer la fenêtre. Ces messages sont décrits dans d’autres rubriques de ce fichier d’aide.

Multithread Applications

Une application Windows peut avoir plusieurs threads d’exécution, et chaque thread peut créer des fenêtres. Le thread qui crée une fenêtre doit contenir le code de sa procédure de fenêtre.

Une application peut utiliser la fonction EnumThreadWindows pour énumérer les fenêtres créées par un thread particulier. Cette fonction transmet le handle à chaque fenêtre de thread, à son tour, à une fonction de rappel définie par l’application, EnumThreadWndProc.

La fonction GetWindowThreadProcessId retourne l’identificateur du thread qui a créé une fenêtre particulière.

Pour définir l’état d’affichage d’une fenêtre créée par un autre thread, utilisez la fonction ShowWindowAsync .