Barres d’état (contrôles Windows)
Une barre de status 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 status. La barre status peut être divisée en parties pour afficher plusieurs types d’informations. La capture d’écran suivante montre la barre d’status dans l’application Microsoft Windows Paint. Dans ce cas, la barre de status contient le texte « Pour obtenir de l’aide, cliquez sur Rubriques d’aide dans le menu Aide ». La barre status est la zone située en bas de la fenêtre qui contient le texte d’aide et les informations de coordonnées.
Cette section comprend les rubriques suivantes.
- Types et styles
- Taille et hauteur
- Barres d’état en plusieurs parties
- Opérations de texte de la barre d’état
- Barres d’état dessinées par le propriétaire
- Barres d’état du mode simple
- Traitement des messages de barre d’état par défaut
Types et styles
La position par défaut d’une barre de status 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 de status.
Notes
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 status 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 identique à 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 d’appareil de la barre de status et sur la largeur des bordures de la fenêtre.
La procédure de fenêtre ajuste automatiquement la taille de la barre de status 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 de status.
Une application peut définir la hauteur minimale de la zone de dessin d’une barre de status en envoyant à la fenêtre un message SB_SETMINHEIGHT, en spécifiant la hauteur minimale, 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 de status dessinée par le propriétaire. Pour plus d’informations, consultez Barres d’état dessinées par le propriétaire plus loin dans ce chapitre.
Vous récupérez les largeurs des bordures d’une barre de status 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.
Multiple-Part Barres d’état
Une barre de status peut comporter de nombreuses parties différentes, chacune affichant une ligne de texte différente. Vous divisez une barre status 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 client du bord droit d’un composant.
Une barre de status peut comporter un maximum de 256 parties, bien que les applications en utilisent généralement beaucoup moins. Vous récupérez le nombre de parties dans une barre de status, 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 de status 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. Il détermine également si la fenêtre parente est responsable du dessin du texte. Pour plus d’informations, consultez la section Barres d’état dessinées par le propriétaire ci-dessous .
Par défaut, le texte est aligné à gauche dans la partie spécifiée d’une barre de status. Vous pouvez incorporer des caractères de tabulation (\ t) dans le texte pour le centrer ou l’aligner à droite. Le texte à droite d’un seul caractère d’onglet 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 de status, utilisez les messages SB_GETTEXTLENGTH et SB_GETTEXT.
Si votre application utilise une barre de status qui ne comporte qu’une seule partie, vous pouvez utiliser les messages WM_SETTEXT, WM_GETTEXT et 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 de status comme un contrôle de texte statique.
Pour afficher une ligne de status sans créer de barre de status, utilisez la fonction DrawStatusText. La fonction utilise les mêmes techniques pour dessiner les status que la procédure de fenêtre pour la barre de status, mais elle ne définit pas automatiquement la taille et la position des informations de status. Lorsque vous appelez la fonction, vous devez spécifier la taille et la position des informations de status, ainsi que le contexte de l’appareil de la fenêtre dans laquelle les dessiner.
Owner-Drawn Barres d’état
Vous pouvez définir des parties individuelles d’une barre de status comme des parties dessinées par le propriétaire. L’utilisation de cette technique vous donne plus de contrôle que vous n’en auriez autrement sur l’apparence de la partie de fenêtre. Par exemple, vous pouvez afficher une bitmap plutôt que du texte ou dessiner du texte à l’aide d’une police différente.
Pour définir un composant de fenêtre comme étant dessiné par le propriétaire, envoyez le message SB_SETTEXT à la barre de status, en spécifiant la partie et la technique de dessin SBT_OWNERDRAW. Lorsque SBT_OWNERDRAW est spécifié, le paramètre lParam est une valeur 32 bits définie par l’application que l’application peut utiliser lors du dessin de la partie. Par exemple, vous pouvez spécifier un handle de police, un handle bitmap, une adresse d’une chaîne, etc.
Lorsqu’une barre de status 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 status, 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 de status, DRAWITEMSTRUCT contient les informations suivantes.
Membre | Description |
---|---|
CtlType | Indéfini; n’utilisez pas. |
CtlID | Identificateur de fenêtre enfant de la barre de status. |
Itemid | Index de base zéro de la partie à dessiner. |
itemAction | Indéfini; n’utilisez pas. |
itemState | Indéfini; n’utilisez pas. |
hwndItem | Handle jusqu’à la barre de status. |
Hdc | Gérez le contexte de l’appareil de la barre de status. |
rcItem | Coordonnées de la partie de fenêtre à dessiner. Les coordonnées sont relatives à l’angle supérieur gauche de la barre de status. |
itemData | Valeur 32 bits définie par l’application spécifiée dans le paramètre lParam du message SB_SETTEXT . |
Barres d’état du mode simple
Vous placez une barre de status en « mode simple » en lui envoyant un message SB_SIMPLE. Une barre de status 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 avant la prochaine WM_PAINT. 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. Un mode simple status barre est utile pour afficher le texte d’aide pour les éléments de menu pendant que l’utilisateur fait défiler le menu.
La chaîne qu’une barre de status affiche en mode simple est conservée 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 au mode non simple sans que le texte en mode simple ne soit modifié.
Lorsque vous définissez le texte d’un mode simple status barre, vous pouvez spécifier n’importe quelle technique de dessin à l’exception de SBT_OWNERDRAW. Un mode simple status barre ne prend pas en charge le dessin du propriétaire.
Traitement des messages de barre d’état par défaut
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 de status. |
WM_DESTROY | Libère les ressources allouées à la barre de status. |
WM_GETFONT | Retourne le handle à la police actuelle avec laquelle la barre de status dessine son texte. |
WM_GETTEXT | Copie le texte de la première partie d’une barre de status dans 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 de la première partie d’une barre de status 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 ne se trouve pas dans la poignée de dimensionnement, la barre de status transmet ce message à la fonction DefWindowProc. |
WM_PAINT | Peint la zone non valide de la barre de status. Si le paramètre wParam n’est pas NULL, 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 de status. |
WM_SETTEXT | Copie le texte spécifié dans la première partie d’une barre de status, à l’aide de l’opération de dessin par défaut (spécifiée comme zéro). Elle retourne TRUE en cas de réussite, ou FALSE dans le cas contraire. |
WM_SIZE | Redimensionne la barre status 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 de status. |