Partager via


TN031 : barres de contrôles

Notes

La note technique suivante n'a pas été mise à jour depuis son inclusion initiale 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 l'objet qui vous intéresse dans l'index de la documentation en ligne.

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

CControlBar

Une ControlBar est une classe dérivée de CWnd qui :

  • Est aligné en haut ou en bas de la fenêtre cadre.

  • Peut contenir les éléments enfants qui sont soit les contrôles basés sur HWND (par exemple, CDialogBar) ou des éléments non basés surHWND (par exemple, CToolBar, CStatusBar).

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

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

  • CBRS_BOTTOM Epingle la barre de contrôle en bas.

  • CBRS_NOALIGN Ne pas replacer la barre de contrôle lorsque le parent redimensionne.

Les classes dérivées de CControlBar fournissent 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 sur une ligne.

  • CDialogBar Un cadre d'une barre d'outils contenant les vérifications standard windows (création d'une ressource modèle de la boîte de dialogue).

  • CDockBar Une zone de stockage généralisée pour d'autres objets dérivés de CControlBar. Les méthodes et les variables spécifiques de cette classe sont susceptibles de changer dans les versions ultérieures.

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

La classe CControlBar montre l'implémentation standard pour :

  • Aligner la barre de contrôle en haut, en bas, ou à l'un ou l'autre côté du cadre.

  • Allouer les tables de contrôle de l'élément.

  • Prendre en charge l'implémentation des classes dérivées.

Les objets de la barre de contrôles C++ sont généralement incorporés en tant que les membres d'une classe dérivée de CFrameWnd, et seront nettoyés lorsque le parent HWND et l'objet sont détruits. Si vous devez allouer un objet de la barre de contrôle sur le segment, il vous suffit de définir le membre de m_bAutoDestruct à VRAI pour faire en sorte que la barre de contrôle « supprime ceci » lorsque HWND est détruit.

Notes

Si vous créez votre propre classe dérivée de CControlBar, au lieu d'utiliser l'une des classes dérivées de MFC, telles que CStatusBar, CToolBar, ou CDialogBar, vous devez définir l'attribut de m_dwStyle.Cette opération peut être effectuée dans la substitution de Créer:

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

   .
   .
   .
}

Algorithme de disposition de la barre de contrôle

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

Consultez CWnd::RepositionBars et CFrameWnd::RecalcLayout pour plus d'informations.

Les messages privés Windows MFC, y compris WM_SIZEPARENT, sont décrits dans la Note technique 24.

CStatusBar

Une barre d'état est une barre de contrôle avec une ligne de volets de sortie texte. Il existe deux façons courantes d'utiliser les volets de sortie texte :

  • En tant que ligne de message

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

  • En tant qu'indicateurs d'états

    (par exemple, les indicateurs CAP, NUM et DÉFIL). Ils sont généralement accessibles par un ID de chaîne/commande

La police de la barre d'état est 10 points MS Sans Serif (stipulé dans le guide de conception d'applications de Windows ou la meilleure correspondance de mappeurs de polices d'une police Suisse proportionnelle à 10 points). Dans certaines versions de Windows, telles que la version japonaise, les polices sélectionnées sont différentes.

Les couleurs utilisées dans la barre d'état sont également compatibles avec la recommandation du guide de conception d'applications de Windows. Ces couleurs ne sont pas codées en dur et sont modifiées dynamiquement en réponse à la personnalisation utilisateur du panneau de configuration.

Élément

Valeur de couleur Windows.

Valeur RVB par défaut

Arrière-plan de la barre d'état

COLOR_BTNFACE

RGB(192, 192, 192)

Texte de la barre d'état

COLOR_BTNTEXT

RGB(000, 000, 000)

Bords supérieurs/gauches de la barre d'état

COLOR_BTNHIGHLIGHT

RVB(255, 255, 255)

Bords inférieurs/droits de barre d'état

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 effectuée via le mécanisme d'ON_UPDATE_COMMAND_UI. Pendant une période d'inactivité, la barre d'état appelle le gestionnaire de ON_UPDATE_COMMAND_UI avec l'ID de chaîne du volet d'indicateur.

Le gestionnaire d'ON_UPDATE_COMMAND_UI peut appeler :

  • Activer: Pour activer ou désactiver le volet. Un volet désactivé ressemble exactement à un volet actif mais le texte est invisible (autrement dit, cela désactive l'indicateur de texte).

  • SetText : Pour modifier le texte. Soyez prudent si vous utilisez ceci car le volet ne se redimensionnera pas automatiquement.

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

La barre d'état ne prend en charge qu'un volet extensible, habituellement le premier volet. La taille de ce volet est réellement une taille minimale. Si la barre d'état est supérieure à la taille minimale de tous les volets, toute largeur supplémentaire sera données au volet extensible. L'application par défaut avec une barre d'état possède des indicateurs alignés à droite pour la CAP, le NUM et le DÉFIL puisque le premier volet est extensible.

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 : boutons poussoir et case à cocher. La fonctionnalité de groupe par radio peut être établie avec des boutons de case à cocher et avec ON_UPDATE_COMMAND_UI.

Tous les boutons bitmap dans la barre d'outils proviennent d'une bitmap. Cette bitmap doit contenir une image ou un glyphe pour chaque bouton. Généralement l'ordre des images ou des glyphes dans la bitmap est l'ordre dans lequel ils sont dessinés à 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 le standard 24x22 pixels. Chaque image/glyphe doit être la même taille et doit être côte à côte dans la bitmap. La taille de l'image/glyphe par défaut est de 16x15 pixels. Par conséquent, pour une barre d'outils avec 10 flèches (en utilisant des tailles standard), vous avez besoin d'une bitmap large de 160 pixels et haute de 15 pixels.

Chaque bouton possède un seul glyphe/image. Les différents états de boutons et de styles (par exemple, enfoncé, vers le haut, vers le bas, désactivé, désactivé complètement, indéterminé) sont générés algorithmiquement depuis cette image/glyphe. Toute bitmap ou DIB de couleur peut être utilisée, en théorie. L'algorithme permettant de créer les différents états de bouton fonctionne mieux si l'image d'origine est en nuances de gris. Examinez les boutons de la barre d'outils standard et image clipart du bouton de la barre d'outils fournis dans les exemples généraux MFC IMAGE CLIPART pour obtenir des exemples.

Les couleurs utilisées dans la barre d'outils sont également compatibles avec la recommandation du guide de conception d'applications de Windows. Ces couleurs ne sont pas codées en dur et sont modifiées dynamiquement en réponse à la personnalisation par l'utilisateur du panneau de configuration.

Élément

Valeur de COULEUR Windows.

Valeur RVB par défaut

Arrière-plan de la barre d'outils

COLOR_BTNFACE

RVB(192,192,192)

Boutons de la barre d'outils supérieur/gauche

COLOR_BTNHIGHLIGHT

RVB(255,255,255)

Bords inférieurs/droits des boutons de la barre d'outils

COLOR_BTNSHADOW

RVB(128,128,128)

En outre, les boutons bitmap de la barre d'outils sont recoloriés comme s'ils étaient les contrôles bouton standard windows. Ce recoloriage se produit lorsque la bitmap est chargée depuis la ressource et en réponse à une modification des couleurs système en réponse à la personnalisation par l'utilisateur du panneau de configuration. Les couleurs suivantes de bitmap de la barre d'outils sont recoloriées automatiquement elles doivent être utilisées avec précaution. Si vous ne souhaitez pas avoir une partie de la bitmap recoloriée, alors utilisez une couleur très proche d'une des valeurs RVB mappées. Le mappage est effectué sur les valeurs RVB exactes.

Valeur RVB

Valeur de COULEUR 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

Consultez la classe CToolBar dans la référence des bibliothèques de classes pour plus d'informations sur les API de création et de personnalisation de la CToolBar. 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 permettent d'ajuster les ID des boutons, styles, largeurs d'espacement et quelle image/glyphe est utilisé pour le bouton. Par défaut vous n'avez pas besoin d'utiliser ces API.

Prise en charge CCmdUI pour CToolBar

La façon dont les boutons de la barre d'outils sont toujours mis à jour est via le mécanisme d' ON_UPDATE_COMMAND_UI. Pendant une période d'inactivité, la barre d'outils appelle le gestionnaire d' ON_UPDATE_COMMAND_UI avec l'ID de commande de ce bouton. ON_UPDATE_COMMAND_UI n'est pas appelé pour des séparateurs, mais elle est appelée pour les boutons poussoir et les cases à cocher.

Le gestionnaire d' ON_UPDATE_COMMAND_UI peut appeler :

  • Activer: Pour activer ou désactiver le bouton. Cela fonctionne aussi des boutons poussoir les boutons de case à cocher.

  • SetCheck: Pour définir l'état d'activation d'un bouton. Appeler cette valeur pour un bouton de la barre d'outils le transformera en case à cocher. SetCheck prend un paramètre qui peut être 0 (non activé), 1 (activé) ou 2 (indéterminé)

  • SetRadio: Raccourci pour SetCheck.

Les boutons des cases à cocher sont les boutons « AUTOMATIQUES » case à cocher ; autrement dit, lorsque l'utilisateur appuye dessus il modifie immédiatement l'état. L'état inférieur ou diminué est vérifié. Il n'existe aucune méthode intégrée de l'interface utilisateur pour mettre un bouton dans l'état « indéterminé » ; cela doit être effectuée via du code.

Les API de personnalisation vous permettent de modifier l'état d'un bouton de la barre d'outils donné, de préférence vous devriez modifier ces états dans le gestionnaire de ON_UPDATE_COMMAND_UI pour la commande que la barre d'outils représente. Rappelez-vous, le traitement des temps d'inactivité modifie l'état des boutons de la barre d'outils du gestionnaire d'ON_UPDATE_COMMAND_UI, toutes les modifications vers les états faits par SetButtonStyle peuvent être perdus après le temps d'inactivité suivant.

Les boutons de la barre d'outils enverront les messages WM_COMMAND comme des boutons normaux ou des éléments de menu standard et sont généralement gérés par un gestionnaire d' ON_COMMAND dans la même classe qui fournit le gestionnaire d' ON_UPDATE_COMMAND_UI.

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

  • TBBS_CHECKED :   La case à cocher est activée actuellement (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 les boutons officiels du Guide de conception d'applications interface Windows sont représentés par les valeurs suivantes de TBBS :

  • Up = 0

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

  • Désactivé = TBBS_DISABLED

  • Vers le bas = TBBS_CHECKED

  • Désactivé vers le bas = TBBS_CHECKED | TBBS_DISABLED

  • Indéterminé = TBBS_INDETERMINATE

CDialogBar

Une barre de dialogue est une barre de contrôle qui contient les contrôles Windows standard. Elle agit comme un dialogue car elle contient des contrôles et prend en charge la tabulation entre eux. Elle se comporte également comme un dialogue car elle utilise un modèle de la boîte de dialogue pour représenter la barre.

CDialogBar est utilisé pour la barre d'outils d'aperçu avant impression, qui contient les contrôles de bouton poussoir standard.

Utiliser une CDialogBar revient à utiliser CFormView. Vous devez définir un modèle de la boîte de dialogue pour la barre de dialogue et supprimer tous les styles à l'exception de WS_CHILD. Notez que la boîte de dialogue ne doit pas être visible.

Les notifications de CDialogBar sont envoyées au parent de la barre de contrôle (comme les boutons de la barre d'outils).

Prise en charge CCmdUI de CDialogBar

Les boutons des barres de la boîte de dialogue doivent être mis à jour par le biais de gestionnaires d' ON_UPDATE_COMMAND_UI. La durée d'inactivité, la barre de la boîte de dialogue appelle le gestionnaire d' ON_UPDATE_COMMAND_UI avec l'ID de commande de tous les boutons qui ont un ID >= 0x8000 (autrement dit, comprise dans la plage des ID de commande).

Le gestionnaire d' ON_UPDATE_COMMAND_UI peut appeler :

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

  • SetText : pour modifier le texte du bouton.

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

Voir aussi

Autres ressources

Notes techniques de nombres

notes techniques de catégorie