Partager via


TN031 : Barres de contrôle

Remarque

La note technique suivante n’a pas été mise à jour depuis sa première inclusion dans la documentation en ligne. Par conséquent, certaines procédures et rubriques peuvent être obsolètes ou incorrectes. Pour obtenir les informations les plus récentes, il est recommandé de rechercher la rubrique intéressante dans l’index de documentation en ligne.

Cette note décrit les classes de barre de contrôle dans MFC : CControlBar, CStatusBar, CToolBar, CDialogBar et CDockBar.

CControlBar

A ControlBar est une CWndclasse dérivée qui :

  • Est aligné sur le haut ou le bas d’une fenêtre frame.

  • Peut contenir des éléments enfants qui sont des contrôles HWND (par exemple) CDialogBarou des éléments nonHWND basés (par exemple, CToolBar, CStatusBar).

Les barres de contrôle prennent en charge les styles supplémentaires :

  • CBRS_TOP (valeur par défaut) épinglez la barre de contrôle en haut.

  • CBRS_BOTTOM épingler la barre de contrôle au bas.

  • CBRS_NOALIGN Ne repositionnez pas la barre de contrôle lorsque le parent est redimensionné.

Les classes dérivées de CControlBar fournir des implémentations plus intéressantes :

  • CStatusBar Une barre d’état, les éléments sont des volets de barre d’état contenant du texte.

  • CToolBar Une barre d’outils, les éléments sont des boutons bitmap alignés dans une ligne.

  • CDialogBar Cadre de type barre d’outils contenant des contrôles Windows standard (créés à partir d’une ressource de modèle de boîte de dialogue).

  • CDockBar Zone d’ancrage généralisée pour d’autres CControlBar objets dérivés. Les fonctions et variables membres spécifiques disponibles dans cette classe sont susceptibles de changer dans les versions ultérieures.

Tous les objets/fenêtres de barre de contrôle sont des fenêtres enfants de certaines fenêtres d’images parentes. Ils sont généralement ajoutés en tant que frère à la zone cliente de l’image (par exemple, un client MDI ou une vue). L’ID de fenêtre enfant d’une barre de contrôle est important. La disposition par défaut de la barre de contrôle fonctionne uniquement pour les barres de contrôle avec des ID dans la plage de AFX_IDW_CONTROLBAR_FIRST à AFX_IDW_CONTROLBAR_LAST. Notez que même s’il existe une plage d’ID de barre de contrôle de 256, les 32 premiers ID de ces barres de contrôle sont spéciaux, car ils sont directement pris en charge par l’architecture d’aperçu avant impression.

La CControlBar classe fournit une implémentation standard pour :

  • Alignement de la barre de contrôle sur le haut, le bas ou l’un des côtés du cadre.

  • Allocation de tableaux d’éléments de contrôle.

  • Prise en charge de l’implémentation de classes dérivées.

Les objets de barre de contrôle C++ sont généralement incorporés en tant que membres d’une CFrameWnd classe dérivée et seront nettoyés lorsque le parent HWND et l’objet sont détruits. Si vous devez allouer un objet de barre de contrôle sur le tas, vous pouvez simplement définir le membre m_bAutoDestruct sur TRUE pour appeler la barre delete this; de contrôle lorsque celle-ci HWND est détruite.

Remarque

Si vous créez votre propre CControlBarclasse dérivée, plutôt que d’utiliser l’une des classes dérivées de MFC, telles que CStatusBar, CToolBarou CDialogBar, vous devez définir le membre de données m_dwStyle . Pour ce faire, procédez comme suit dans le remplacement de Create:

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
    DWORD dwStyle,
    UINT nID)
{
    m_dwStyle = dwStyle;

.
.
.
}

Algorithme de disposition de barre de contrôle

L’algorithme de disposition de la barre de contrôle est très simple. La fenêtre frame envoie un message WM_SIZEPARENT à tous les enfants de la plage de barres de contrôle. En plus de ce message, un pointeur vers le rectangle client du parent est passé. Ce message est envoyé aux enfants dans l’ordre Z. Les enfants de barre de contrôle utilisent ces informations pour se positionner et réduire la taille de la zone cliente du parent. Le rectangle final qui est laissé pour la zone cliente normale (moins les barres de contrôle) est utilisé pour positionner la fenêtre cliente principale (généralement un client MDI, une vue ou une fenêtre de fractionnement).

Pour plus d’informations, consultez CWnd::RepositionBars et CFrameWnd::RecalcLayout pour plus d’informations.

Les messages Windows privés MFC, y compris WM_SIZEPARENT, sont documentés dans la note technique 24.

CStatusBar

Une barre d’état est une barre de contrôle qui a une ligne de volets de sortie de texte. Il existe deux façons courantes d’utiliser des volets de sortie de texte :

  • En tant que ligne de message

    (par exemple, la ligne de message d’aide du menu standard). Ceux-ci sont généralement accessibles par un index basé sur 0

  • En tant qu’indicateurs d’état

    (par exemple, les indicateurs CAP, NUM et SCRL). Ceux-ci sont généralement accessibles par l’ID de chaîne/commande.

La police de la barre d’état est 10 points MS Sans Serif (dictée par le Guide de conception de l’application de l’interface Windows ou les mappeurs de polices les mieux adaptés à une police proportionnelle suisse de 10 points). Sur certaines versions de Windows, telles que l’édition japonaise, les polices sélectionnées sont différentes.

Les couleurs utilisées dans la barre d’état sont également cohérentes avec la recommandation du Guide de conception d’application de l’interface Windows. Ces couleurs ne sont pas codées en dur et sont modifiées dynamiquement en réponse à la personnalisation de l’utilisateur dans le Panneau de configuration.

Élément Valeur COLOR Windows RVB par défaut
Arrière-plan de la barre d’état COLOR_BTNFACE RVB(192, 192, 192)
Texte de la barre d’état COLOR_BTNTEXT RVB(000, 000, 000)
Bords supérieur/gauche de la barre d’état COLOR_BTNHIGHLIGHT RVB(255, 255, 255)
Bot de barre d’état/bords droit COLOR_BTNSHADOW RVB(128, 128, 128)

Prise en charge de CCmdUI pour CStatusBar

La façon dont les indicateurs sont généralement mis à jour est par le biais du mécanisme de ON_UPDATE_COMMAND_UI. Lors de l’inactivité, la barre d’état appelle le gestionnaire ON_UPDATE_COMMAND_UI avec l’ID de chaîne du volet d’indicateur.

Le gestionnaire ON_UPDATE_COMMAND_UI peut appeler :

  • Enable: pour activer ou désactiver le volet. Un volet désactivé ressemble exactement à un volet activé, mais le texte est invisible (autrement dit, désactive l’indicateur de texte).

  • SetText: pour modifier le texte. Soyez prudent si vous utilisez ce paramètre, car le volet ne sera pas redimensionné automatiquement.

Reportez-vous à la classe CStatusBar dans la référence de la bibliothèque de classes pour plus d’informations sur CStatusBar la création et les API de personnalisation. La plupart des barres d’état doivent être effectuées avant que la barre d’état ne soit initialement visible.

La barre d’état ne prend en charge qu’un seul volet étendu, généralement le premier volet. La taille de ce volet est vraiment une taille minimale. Si la barre d’état est supérieure à la taille minimale de tous les volets, toute largeur supplémentaire est donnée au volet étiré. L’application par défaut avec une barre d’état a des indicateurs alignés à droite pour CAP, NUM et SCRL, car le premier volet est étiré.

CToolBar

Une barre d’outils est une barre de contrôle avec une ligne de boutons bitmap qui peuvent inclure des séparateurs. Deux styles de boutons sont pris en charge : les boutons pushbuttons et les boutons de case à cocher. Les fonctionnalités de groupe radio peuvent être générées avec des boutons de case à cocher et ON_UPDATE_COMMAND_UI.

Tous les boutons bitmap de la barre d’outils sont extraits d’une image bitmap. Cette bitmap doit contenir une image ou un glyphe pour chaque bouton. En règle générale, l’ordre des images/glyphes dans la bitmap est le même ordre qu’il sera dessiné à l’écran. (Cela peut être modifié à l’aide des API de personnalisation.)

Chaque bouton doit être de la même taille. La valeur par défaut est la norme 24 x 22 pixels. Chaque image/glyphe doit être de la même taille et doit être côte à côte dans la bitmap. La taille par défaut de l’image/glyphe est de 16 x 15 pixels. Par conséquent, pour une barre d’outils avec 10 boutons (à l’aide de tailles standard), vous avez besoin d’une bitmap de 160 pixels large et de 15 pixels de haut.

Chaque bouton a une seule image/glyphe. Les différents états et styles de bouton (par exemple, enfoncés, bas, désactivés, désactivés, indéterminés) sont générés de façon algorithmique à partir de cette image/glyphe. Toute bitmap de couleur ou DIB peut être utilisée en théorie. L’algorithme permettant de générer les différents états de bouton fonctionne mieux si l’image d’origine est des nuances de gris. Examinez les boutons de barre d’outils standard et le clipart de bouton de barre d’outils fourni dans l’exemple CLIPART général MFC pour obtenir des exemples.

Les couleurs utilisées dans la barre d’outils sont également cohérentes avec la recommandation du Guide de conception d’application de l’interface Windows. Ces couleurs ne sont pas codées en dur et sont modifiées dynamiquement en réponse à la personnalisation de l’utilisateur dans le Panneau de configuration.

Élément Valeur COLOR Windows RVB par défaut
Arrière-plan toolBar COLOR_BTNFACE RVB(192,192,192)
Boutons ToolBar en haut/à gauche COLOR_BTNHIGHLIGHT RVB(255,255,255)
Boutons ToolBar bot/bords droit COLOR_BTNSHADOW RVB(128,128,128)

En outre, les boutons bitmap de la barre d’outils sont recolorés comme s’ils étaient des contrôles de bouton Windows standard. Cette recolorie se produit lorsque la bitmap est chargée à partir de la ressource et en réponse à une modification des couleurs système en réponse à la personnalisation de l’utilisateur dans le Panneau de configuration. Les couleurs suivantes dans une bitmap de barre d’outils seront recolorées automatiquement afin qu’elles soient utilisées avec précaution. Si vous ne souhaitez pas avoir une partie de votre bitmap recolorée, utilisez une couleur qui se rapproche étroitement de l’une des valeurs RVB mappées. Le mappage est effectué en fonction des valeurs RVB exactes.

Valeur RVB Valeur COLOR mappée dynamiquement
RVB(000, 000, 000) COLOR_BTNTEXT
RVB(128, 128, 128) COLOR_BTNSHADOW
RVB(192, 192, 192) COLOR_BTNFACE
RVB(255, 255, 255) COLOR_BTNHIGHLIGHT

Reportez-vous à la classe CToolBar la référence de la bibliothèque de classes pour plus d’informations sur les CToolBar API de création et de personnalisation. La plupart des personnalisations des barres d’outils doivent être effectuées avant que la barre d’outils ne soit initialement rendue visible.

Les API de personnalisation peuvent être utilisées pour ajuster les ID de bouton, les styles, la largeur de l’espaceur et l’image/glyphe utilisé pour ce bouton. Par défaut, vous n’avez pas besoin d’utiliser ces API.

Prise en charge de CCmdUI pour CToolBar

La façon dont les boutons de barre d’outils sont toujours mis à jour est via le mécanisme de ON_UPDATE_COMMAND_UI. Au moment de l’inactivité, la barre d’outils appelle le gestionnaire ON_UPDATE_COMMAND_UI avec l’ID de commande de ce bouton. ON_UPDATE_COMMAND_UI n’est pas appelé pour les séparateurs, mais il est appelé pour les boutons pushbuttons et case à cocher.

Le gestionnaire ON_UPDATE_COMMAND_UI peut appeler :

  • Enable: pour activer ou désactiver le bouton. Cela fonctionne également pour les boutons pushbuttons et les boutons de case à cocher.

  • SetCheck: Pour définir l’état de vérification d’un bouton. L’appel d’un bouton de barre d’outils le transforme en bouton de case à cocher. SetCheck prend un paramètre qui peut être égal à 0 (non vérifié), 1 (activé) ou 2 (indéterminé)

  • SetRadio: Raccourci pour SetCheck.

Les boutons de case à cocher « AUTO » sont des boutons de case à cocher ; autrement dit, lorsque l’utilisateur appuie dessus, il change immédiatement d’état. La vérification est l’état bas ou dépressionné. Il n’existe aucune méthode d’interface utilisateur intégrée pour changer un bouton en état « indéterminé » ; cela doit être effectué par le biais du code.

Les API de personnalisation vous permettent de modifier l’état d’un bouton de barre d’outils donné, de préférence vous devez modifier ces états dans le gestionnaire ON_UPDATE_COMMAND_UI pour la commande que représente le bouton de barre d’outils. N’oubliez pas que le traitement inactif modifie l’état des boutons de barre d’outils avec le gestionnaire ON_UPDATE_COMMAND_UI, de sorte que les modifications apportées à ces états par le biais de SetButtonStyle peuvent être perdues après l’inactivité suivante.

Les boutons de barre d’outils envoient des messages WM_COMMAND tels que des boutons normaux ou des éléments de menu et sont normalement gérés par un gestionnaire de ON_COMMAND dans la même classe qui fournit le gestionnaire ON_UPDATE_COMMAND_UI.

Il existe quatre styles de bouton de barre d’outils (valeurs TBBS_) utilisés pour les états d’affichage :

  • TBBS_CHECKED : la case à cocher est actuellement cochée (en bas).

  • TBBS_INDETERMINATE : la case à cocher est actuellement indéterminée.

  • TBBS_DISABLED : le bouton est actuellement désactivé.

  • TBBS_PRESSED : le bouton est actuellement enfoncé.

Les six styles officiels du guide de conception d’application de l’interface Windows sont représentés par les valeurs TBBS suivantes :

  • Up = 0

  • Souris vers le bas = TBBS_PRESSED (| tout autre style)

  • Désactivé = TBBS_DISABLED

  • Down = TBBS_CHECKED

  • Désactivé = TBBS_CHECKED | TBBS_DISABLED

  • Indéterminé = TBBS_INDETERMINATE

CDialogBar

Une barre de dialogue est une barre de contrôle qui contient des contrôles Windows standard. Il agit comme une boîte de dialogue dans laquelle il contient les contrôles et prend en charge la tabulation entre eux. Il agit également comme un dialogue dans lequel il utilise un modèle de dialogue pour représenter la barre.

Il CDialogBar est utilisé pour la barre d’outils d’aperçu avant impression, qui contient des contrôles pushbutton standard.

L’utilisation d’un CDialogBar est semblable à l’utilisation d’un CFormView. Vous devez définir un modèle de dialogue pour la barre de dialogue et supprimer tous les styles, sauf WS_CHILD. Notez que la boîte de dialogue ne doit pas être visible.

Les notifications de contrôle pour un CDialogBar seront envoyées au parent de la barre de contrôle (comme les boutons de barre d’outils).

Prise en charge de CCmdUI pour CDialogBar

Les boutons de barre de dialogue doivent être mis à jour via le mécanisme de gestionnaire ON_UPDATE_COMMAND_UI. Au moment d’inactivité, la barre de dialogue appelle le gestionnaire ON_UPDATE_COMMAND_UI avec l’ID de commande de tous les boutons qui ont un ID >= 0x8000 (autrement dit, dans la plage d’ID de commande).

Le gestionnaire ON_UPDATE_COMMAND_UI peut appeler :

  • Activez : pour activer ou désactiver le bouton.

  • SetText : pour modifier le texte du bouton.

La personnalisation peut être effectuée via des API de gestionnaire de fenêtre standard.

Voir aussi

Notes techniques par numéro
Notes techniques par catégorie