Barres d’état (contrôles Windows)
Une barre d’état est une fenêtre horizontale située en bas d’une fenêtre parente dans laquelle une application peut afficher différents types d’informations d’état. La barre d’état peut être divisée en parties pour afficher plusieurs types d’informations. La capture d’écran suivante montre la barre d’état dans l’application Microsoft Windows Paint. Dans ce cas, la barre d’état contient le texte « Pour obtenir de l’aide, cliquez sur Rubriques d’aide dans le menu Aide ». La barre d’état est la zone située en bas de la fenêtre qui contient du texte d’aide et des informations de coordonnées.
Cette section inclut les rubriques suivantes.
- types et styles
- taille et hauteur
- Multiple-Part barres d’état
- opérations de texte de barre d’état
- Owner-Drawn barres d’état
- barres d’état en mode simple
- traitement des messages par défaut de la barre d’état
Types et styles
La position par défaut d’une barre d’état se trouve en bas de la fenêtre parente, mais vous pouvez spécifier le style CCS_TOP pour qu’il apparaisse en haut de la zone cliente de la fenêtre parente.
Vous pouvez spécifier le style SBARS_SIZEGRIP pour inclure une poignée de dimensionnement à l’extrémité droite de la barre d’état.
Note
La combinaison des styles CCS_TOP et SBARS_SIZEGRIP n’est pas recommandée, car la poignée de dimensionnement résultante n’est pas fonctionnelle.
Taille et hauteur
La procédure de fenêtre pour la barre d’état définit automatiquement la taille et la position initiales de la fenêtre, en ignorant les valeurs spécifiées dans la fonction CreateWindowEx. La largeur est la même que celle de la zone cliente de la fenêtre parente. La hauteur est basée sur les métriques de la police actuellement sélectionnée dans le contexte de l’appareil de la barre d’état et sur la largeur des bordures de la fenêtre.
La procédure de fenêtre ajuste automatiquement la taille de la barre d’état chaque fois qu’elle reçoit un message WM_SIZE. En règle générale, lorsque la taille de la fenêtre parente change, le parent envoie un message WM_SIZE à la barre d’état.
Une application peut définir la hauteur minimale de la zone de dessin d’une barre d’état en envoyant à la fenêtre un message SB_SETMINHEIGHT, en pixels, en pixels. La zone de dessin n’inclut pas les bordures de la fenêtre. Une hauteur minimale est utile pour dessiner dans une barre d’état dessinée par le propriétaire. Pour plus d’informations, consultez Owner-Drawn barres d’état plus loin dans ce chapitre.
Vous récupérez les largeurs des bordures d’une barre d’état en envoyant à la fenêtre un message SB_GETBORDERS. Le message inclut l’adresse d’un tableau à trois éléments qui reçoit les largeurs.
barres d’état Multiple-Part
Une barre d’état peut avoir de nombreuses parties différentes, chacune affichant une ligne de texte différente. Vous divisez une barre d’état en parties en envoyant à la fenêtre un message SB_SETPARTS, en spécifiant le nombre de parties à créer et l’adresse d’un tableau d’entiers. Le tableau contient un élément pour chaque partie, et chaque élément spécifie la coordonnée cliente du bord droit d’une partie.
Une barre d’état peut avoir un maximum de 256 parties, bien que les applications utilisent généralement beaucoup moins que cela. Vous récupérez un nombre de parties dans une barre d’état, ainsi que la coordonnée du bord droit de chaque partie, en envoyant à la fenêtre un message SB_GETPARTS.
Opérations de texte de la barre d’état
Vous définissez le texte d’une partie d’une barre d’état en envoyant le message SB_SETTEXT, en spécifiant l’index de base zéro d’une partie, une adresse de la chaîne à dessiner dans la partie et la technique de dessin de la chaîne. La technique de dessin détermine si le texte a une bordure et, le cas échéant, le style de la bordure. Elle détermine également si la fenêtre parente est chargée de dessiner le texte. Pour plus d’informations, consultez la section Owner-Drawn Barres d’état ci-dessous.
Par défaut, le texte est aligné à gauche dans la partie spécifiée d’une barre d’état. Vous pouvez incorporer des tabulations (\ t) dans le texte au centre ou l’aligner à droite. Le texte à droite d’un seul caractère de tabulation est centré et le texte à droite d’un deuxième caractère de tabulation est aligné à droite.
Pour récupérer du texte à partir d’une barre d’état, utilisez les messages SB_GETTEXTLENGTH et SB_GETTEXT.
Si votre application utilise une barre d’état qui n’a qu’une seule partie, vous pouvez utiliser les WM_SETTEXT, les WM_GETTEXTet les messages WM_GETTEXTLENGTH pour effectuer des opérations de texte. Ces messages traitent uniquement la partie qui a un index de zéro, ce qui vous permet de traiter la barre d’état comme un contrôle de texte statique.
Pour afficher une ligne d’état sans créer de barre d’état, utilisez la fonction DrawStatusText. La fonction utilise les mêmes techniques pour dessiner l’état que la procédure de fenêtre pour la barre d’état, mais elle ne définit pas automatiquement la taille et la position des informations d’état. Lors de l’appel de la fonction, vous devez spécifier la taille et la position des informations d’état, ainsi que le contexte de l’appareil de la fenêtre dans laquelle la dessiner.
barres d’état Owner-Drawn
Vous pouvez définir des parties individuelles d’une barre d’état pour qu’elles soient des parties dessinées par le propriétaire. L’utilisation de cette technique vous donne plus de contrôle que vous le feriez autrement sur l’apparence de la partie fenêtre. Par exemple, vous pouvez afficher une bitmap plutôt que du texte ou dessiner du texte à l’aide d’une autre police.
Pour définir un composant de fenêtre en tant que dessin propriétaire, envoyez le message SB_SETTEXT à la barre d’état, en spécifiant la partie et la technique de dessin SBT_OWNERDRAW. Quand SBT_OWNERDRAW est spécifié, le paramètre lParam est une valeur définie par l’application 32 bits que l’application peut utiliser lors du dessin du composant. Par exemple, vous pouvez spécifier un handle de police, un handle bitmap, une adresse d’une chaîne, et ainsi de suite.
Lorsqu’une barre d’état doit dessiner une partie dessinée par le propriétaire, elle envoie le message WM_DRAWITEM à la fenêtre parente. Le paramètre wParam du message est l’identificateur de fenêtre enfant de la barre d’état, et le paramètre lParam est l’adresse d’une structure DRAWITEMSTRUCT. La fenêtre parente utilise les informations de la structure pour dessiner la partie. Pour une partie dessinée par le propriétaire d’une barre d’état, DRAWITEMSTRUCT contient les informations suivantes.
Membre | Description |
---|---|
CtlType | Indéfini; n’utilisez pas. |
CtlID | Identificateur de fenêtre enfant de la barre d’état. |
itemID | Index de base zéro de la partie à dessiner. |
itemAction | Indéfini; n’utilisez pas. |
itemState | Indéfini; n’utilisez pas. |
hwndItem | Gérez la barre d’état. |
hDC | Gérez le contexte de l’appareil de la barre d’état. |
rcItem | Coordonnées de la partie fenêtre à dessiner. Les coordonnées sont relatives au coin supérieur gauche de la barre d’état. |
itemData | Valeur 32 bits définie par l’application spécifiée dans le paramètre lParam du message SB_SETTEXT. |
Barres d’état en mode simple
Vous placez une barre d’état en « mode simple » en l’envoyant un message SB_SIMPLE. Une barre d’état en mode simple n’affiche qu’une seule partie. Lorsque le texte de la fenêtre est défini, la fenêtre est invalidée, mais elle n’est pas redessinée jusqu’à la WM_PAINTsuivante. L’attente du message réduit le scintillement de l’écran en réduisant le nombre de fois où la fenêtre est redessinée. Une barre d’état en mode simple est utile pour afficher le texte d’aide des éléments de menu pendant que l’utilisateur fait défiler le menu.
Chaîne affichée par une barre d’état en mode simple séparément des chaînes qu’elle affiche en mode non simple. Cela signifie que vous pouvez placer la fenêtre en mode simple, définir son texte et revenir en mode non simple sans modifier le texte en mode non simple.
Lorsque vous définissez le texte d’une barre d’état en mode simple, vous pouvez spécifier n’importe quelle technique de dessin, sauf SBT_OWNERDRAW. Une barre d’état en mode simple ne prend pas en charge le dessin du propriétaire.
Traitement des messages par défaut de la barre d’état
Cette section décrit les messages gérés par la procédure de fenêtre pour la classe STATUSCLASSNAME prédéfinie.
Message | Traitement par défaut |
---|---|
WM_CREATE | Initialise la barre d’état. |
WM_DESTROY | Libère les ressources allouées pour la barre d’état. |
WM_GETFONT | Retourne le handle à la police actuelle avec laquelle la barre d’état dessine son texte. |
WM_GETTEXT | Copie le texte de la première partie d’une barre d’état vers une mémoire tampon. Elle retourne une valeur 32 bits qui spécifie la longueur, en caractères, du texte et la technique utilisée pour dessiner le texte. |
WM_GETTEXTLENGTH | Retourne une valeur 32 bits qui spécifie la longueur, en caractères, du texte dans la première partie d’une barre d’état et la technique utilisée pour dessiner le texte. |
WM_NCHITTEST | Renvoie la valeur HTBOTTOMRIGHT si le curseur de la souris se trouve dans la poignée de dimensionnement, ce qui entraîne l’affichage du curseur de dimensionnement par le système. Si le curseur de la souris n’est pas dans la poignée de dimensionnement, la barre d’état transmet ce message à la fonction DefWindowProc. |
WM_PAINT | Peint la région non valide de la barre d’état. Si le paramètre wParam n’est pasNULL, le contrôle suppose que la valeur est un HDC et peint à l’aide de ce contexte d’appareil. |
WM_SETFONT | Sélectionne le handle de police dans le contexte de l’appareil pour la barre d’état. |
WM_SETTEXT | Copie le texte spécifié dans la première partie d’une barre d’état, à l’aide de l’opération de dessin par défaut (spécifiée comme zéro). Elle retourne TRUE si elle réussit, ou FALSE sinon. |
WM_SIZE | Redimensionne la barre d’état en fonction de la largeur actuelle de la zone cliente de la fenêtre parente et de la hauteur de la police actuelle de la barre d’état. |