TN031 : barres de contrôles
[!REMARQUE]
La note technique suivante n'a pas été modifiée depuis si c'était première inclus dans la documentation en ligne.Par conséquent, certaines procédures et rubriques peuvent être obsolètes ou incorrects.Pour obtenir les informations les plus récentes, il est recommandé que vous trouviez la rubrique d'intérêt dans l'index de la documentation en ligne.
Cette remarque décrit les classes de barres de contrôles dans MFC : le CControlBarGénéral, CStatusBar, CToolBar, CDialogBar, et CDockBar.
CControlBar
ControlBar est CWndclasse dérivée qui :
Est aligné en haut ou en bas d'une fenêtre frame.
Peut contenir des éléments enfants qui sont soit les contrôles basés sur HWND (par exemple, CDialogBar) ou les éléments basés surHWND non- (par exemple, CToolBar, CStatusBar).
Les barres de contrôles prennent en charge les styles supplémentaires :
Broche d'CBRS_TOP(valeur par défaut) la barre de contrôles en haut.
Broche d'CBRS_BOTTOMla barre de contrôles en bas.
CBRS_NOALIGN ne repositionnez pas la barre de contrôles lorsque le parent est redimensionné.
Les classes dérivées d' CControlBar fournissent des implémentations plus intéressantes :
La barre d'état d'CStatusBarUn, éléments sont des volets de barre d'état qui contient le texte.
La barre d'outils d'CToolBarUn, éléments sont des boutons bitmap alignés dans une ligne.
Frame comme une barre d'outils d'CDialogBarA contenant les contrôles standard de windows (créés à partir d'une ressource modèle de boîte de dialogue).
CDockBar A généralisé ancrage la zone pour d'autres objets dérivés d' CControlBar .Les fonctions membres et les variables spécifiques disponibles dans cette classe sont susceptibles de changer dans les versions ultérieures.
Tous les objets/fenêtres de barres de contrôles seront les fenêtres enfants d'une certaine fenêtre frame parente.Ils sont généralement ajoutés en tant que frère à la zone cliente du frame (par exemple, un client MDI ou une vue).L'ID de fenêtre enfant d'une barre de contrôles est important.La disposition par défaut de la barre de contrôles fonctionne uniquement pour les barres de contrôles avec des identificateurs de la plage d' AFX_IDW_CONTROLBAR_FIRST à AFX_IDW_CONTROLBAR_LAST.Notez que bien qu'il y ait une plage des identificateurs de 256 barres de contrôles, les 32 premiers de ces identificateurs de barres de contrôles sont spéciaux étant donné qu'ils sont pris en charge directement par l'architecture d'aperçu avant impression.
La classe d' CControlBar fournit l'implémentation standard pour :
Aligner la barre de contrôles en haut, en bas, ou à l'un ou l'autre partie du frame.
Allouer des tableaux de contrôle d'élément.
Prendre en charge l'implémentation des classes dérivées.
Les objets de barres de contrôles C++ seront généralement incorporés en tant que membres d'une classe dérivée d' CFrameWnd , et nettoyés lorsque HWND et l'objet parents sont détruits.Si vous devez allouer un objet de barres de contrôles sur le tas, il vous suffit de définir le membre de m_bAutoDestruct à TRUE pour afficher la barre de contrôles « delete this » lorsque HWND est détruit.
[!REMARQUE]
Si vous créez votre propre CControlBarclasse dérivée de, plutôt qu'à l'aide d'une des classes dérivées de MFC, telles que CStatusBar, CToolBar, ou CDialogBar, vous devrez définir les données membres d' 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ôles
L'algorithme de disposition de la barre de contrôles est très simple.La fenêtre frame envoie un message WM_SIZEPARENT à tous les enfants dans la plage de barres de contrôles.Avec ce message, un pointeur vers le rectangle client du parent est passé.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 réduire la taille de la zone cliente du parent.Le dernier rectangle qui est autorisé pour la zone cliente normale (moins de barres de contrôles) est utilisé pour positionner la fenêtre cliente principale (généralement un client, une vue ou une fenêtre fractionnée MDI).
Voir CWnd::RepositionBars et l' CFrameWnd::RecalcLayout pour plus de détails.
Les messages privés de fenêtres de MFC, notamment WM_SIZEPARENT, sont documentés dans note technique 24.
CStatusBar
Une barre d'état est une barre de contrôles qui a une ligne de volets de sortie de texte.Il existe deux façons courantes d'utiliser les volets de sortie de texte :
Comme ligne de message
(par exemple, la ligne de message standard d'aide de menu).Ceux-ci sont généralement accessibles par les 0 indexés basés
Comme indicateurs
(par exemple, les indicateurs de CAP, NUMÉRIQUES et de ARRÊT DÉFIL).Ceux-ci sont généralement accessibles par ID de chaîne/commande
La police de la barre d'état est de 10 points MS Sans Serif (dictés par le guide de conception d'applications d'interface Windows ou correspondance de mappeurs de polices la meilleure d'une police proportionnelle de 10 Suisses de point).Sur 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 spécification du guide de conception d'applications d'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 de couleur de fenêtres |
RGB par défaut |
---|---|---|
Arrière-plan de barre d'état |
COLOR_BTNFACE |
RGB (192, 192, 192) |
Texte de la barre d'état |
COLOR_BTNTEXT |
RGB (000, 000, 000) |
Sommets/gauche de la barre d'état |
COLOR_BTNHIGHLIGHT |
RGB (255, 255, 255) |
Araignée/bords droit de barre d'état |
COLOR_BTNSHADOW |
RGB (128, 128, 128) |
Prise en charge de CCmdUI de CStatusBar
La façon dont les indications sont généralement mis à jour est via le mécanisme d' ON_UPDATE_COMMAND_UI .À l'heure la durée d'inactivité, la barre d'état appelle le gestionnaire d' ON_UPDATE_COMMAND_UI avec l'ID de chaîne du volet des indicateurs.
Le gestionnaire d' ON_UPDATE_COMMAND_UI peut appeler :
Activer: pour activer ou désactiver le volet.Un volet désactivé consulte exactement à appeler un volet actif mais le texte est invisible (autrement dit, interrompt l'indicateur de texte).
SetText: pour modifier le texte.Faites attention lorsque vous utilisez ce test car le volet ne redimensionnera pas automatiquement.
Reportez -vous à 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 de personnalisation des barres d'état doit être effectuée avant que la barre d'état soit initialement rendue visible.
La barre d'état prend en charge un seul volet extensible, généralement le premier volet.La taille de ce volet s'agit d'une taille minimale.Si la barre d'état est plus grande que la taille minimale de tous les volets, toute largeur supplémentaire est donné au volet extensible.L'application par défaut par une barre d'état a les indicateurs alignés à droite de la CAP, VERR et le ARRÊT DÉFIL étant donné que le premier volet est extensible.
CToolBar
Une barre d'outils est une barre de contrôles avec une ligne de boutons bitmap qui peuvent inclure des séparateurs.Deux styles des boutons sont pris en charge : boutons de commande fonctionnent et cases à cocher.La fonctionnalité de groupe par cases d'option peut être établie avec les boutons et ON_UPDATE_COMMAND_UIde case à cocher.
Tous les boutons bitmap dans la barre d'outils sont pris d'une bitmap.Cette bitmap doit contenir une image ou glyphe pour chaque bouton.En général l'ordre des images/des glyphes dans la bitmap est l'ordre dans lequel elles seront dessinées sur l'écran.(Cela peut être modifié à l'aide de les API de personnalisation.)
Chaque bouton doit être de la même taille.La valeur par défaut est pixels de la norme 24x22.Chaque image/glyphe doit être la même taille et doit être côte à côte dans la bitmap.L'image/taille par défaut de glyphe est pixels 16x15.Par conséquent, pour une barre d'outils avec 10 boutons (à l'aide de les tailles standard), vous avez besoin d'une bitmap qui est de 160 pixels de largeur et de 15 pixels de haut.
Chaque bouton a un seul image/glyphe.Les différents états de bouton et styles (par exemple, enfoncé, en haut, vers le bas, de désactivé, désactivé vers le bas, indéterminé) sont générés par algorithme de ces une image/glyphe.Une bitmap ou fichier DIB de couleur peut être utilisée en théorie.L'algorithme pour générer les différents états de bouton fonctionne le mieux si l'image d'origine soit les nuances de gris.Examinez les boutons de barre d'outils standard et l'image clipart de bouton de barre d'outils fournis dans l'exemple général IMAGE CLIPART MFC pour obtenir des exemples.
Les couleurs utilisées dans la barre d'outils sont également compatibles avec la spécification du guide de conception d'applications d'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 de couleur de fenêtres |
RGB par défaut |
---|---|---|
Arrière-plan de barre d'outils |
COLOR_BTNFACE |
RGB (192.192.192) |
Boutons de barre d'outils supérieurs/bords gauche |
COLOR_BTNHIGHLIGHT |
RGB (255.255.255) |
Araignée/bords droit de boutons de barre d'outils |
COLOR_BTNSHADOW |
RGB (128.128.128) |
En outre, les boutons bitmap de barre d'outils sont recoloriés comme s'ils étaient les contrôles bouton standard de windows.Ce changement se produit lorsque la bitmap est chargée 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 sont recoloriées automatiquement elles doivent être utilisées avec précaution.Si vous ne souhaitez pas avoir une partie de votre bitmap recoloriée, puis utiliser une couleur qui correspond le plus étroitement une des valeurs RVB mappées.Le mappage est effectué à des valeurs RVB exactes.
Valeur RVB |
Valeur de couleur dynamiquement mappée |
---|---|
RGB (000, 000, 000) |
COLOR_BTNTEXT |
RGB (128, 128, 128) |
COLOR_BTNSHADOW |
RGB (192, 192, 192) |
COLOR_BTNFACE |
RGB (255, 255, 255) |
COLOR_BTNHIGHLIGHT |
Reportez -vous à la classe CToolBarla référence de la bibliothèque de classes pour plus d'informations sur les API de création et de personnalisation d' CToolBar .La plupart de personnalisation des barres d'outils doit être effectuée avant que la barre d'outils soit initialement rendue visible.
Les API de personnalisation peuvent être utilisées pour ajuster les identificateurs de bouton, styles, largeur d'écartement et que l'image/glyphe est utilisé pour le bouton.Par défaut vous n'avez pas besoin d'utiliser ces API.
Prise en charge de CCmdUI de CToolBar
La façon dont les boutons de barre d'outils sont systématiquement mise à jour est via le mécanisme d' ON_UPDATE_COMMAND_UI .À l'heure la durée 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 les séparateurs, mais il est appelé pour les boutons de commande fonctionnent et les cases à cocher.
Le gestionnaire d' ON_UPDATE_COMMAND_UI peut appeler :
Activer: pour activer ou désactiver le bouton.C'est également vrai pour les boutons de commande fonctionnent et les cases à cocher.
SetCheck: pour définir l'état d'activation d'un bouton.Appeler cette méthode d'un bouton de barre d'outils le transforme en bouton de case à cocher.SetCheck accepte un paramètre qui peut être 0 (désactivé), 1 (coché) ou 2 (indéterminé)
SetRadio: Abrégé pour SetCheck.
Les cases à cocher sont les boutons « AUTOMATIQUES » de la case à cocher ; en d'autres termes, lorsque l'utilisateur appuie sur les ils modifient immédiatement l'état.Checked est le bas ou l'état réduite.Il n'existe aucun moyen intégré d'interface utilisateur de modifier un bouton à l'état « indéterminé » ; cela doit être effectué à l'aide de code.
Les API de personnalisation vous permet de modifier l'état d'un bouton de barre d'outils donné, de préférence à modifier ces rapports dans le gestionnaire d' ON_UPDATE_COMMAND_UI de la commande que le bouton de barre d'outils représente.N'oubliez pas, le traitement des temps d'inactivité modifie l'état des boutons de barre d'outils avec le gestionnaire d' ON_UPDATE_COMMAND_UI par conséquent, toutes les modifications apportées à ces rapports effectués par l'intermédiaire de SetButtonStyle risquent d'après la inactive suivant.
Les boutons de barre d'outils enverront des messages de WM_COMMAND comme les boutons ou les éléments de menu normal et sont normalement managé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 barre d'outils (valeurs de TBBS_) utilisés pour des conditions d'affichage :
TBBS_CHECKED : la case à cocher est actuellement activée (vers le 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 des boutons officiels de guide de conception d'applications d'interface Windows sont représentés par les valeurs suivantes de TBBS :
En haut de = 0
Souris vers le bas (= TBBS_PRESSED| un autre style)
Désactivé = TBBS_DISABLED
Vers le bas = TBBS_CHECKED
Vers le bas désactivé = TBBS_CHECKED | TBBS_DISABLED
Indéterminé = TBBS_INDETERMINATE
CDialogBar
Une barre de boîte de dialogue est une barre de contrôles qui contient des contrôles Windows standard.Il se comporte comme une boîte de dialogue car il contient des contrôles et prend en charge la tabulation entre eux.Il joue également comme un dialogue parce qu'il utilise un modèle de 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 bouton de commande fonctionnent standard.
À l'aide de CDialogBar s'utilise comme CFormView.Vous devez définir un modèle de boîte de dialogue de la barre de boîte 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 CDialogBar doivent être envoyées au parent de la barre de contrôles (comme les boutons de barre d'outils).
Prise en charge de CCmdUI de CDialogBar
Les boutons de la barre de boîte de dialogue doivent être mis à jour via le mécanisme de gestionnaire d' ON_UPDATE_COMMAND_UI .À la durée d'inactivité, la barre de boîte de dialogue appelle le gestionnaire d' ON_UPDATE_COMMAND_UI avec l'ID de commande de tous les boutons qui ont un >= 0x8000 d'ID (autrement dit, dont les valeurs des ID de commandes).
Le gestionnaire d' ON_UPDATE_COMMAND_UI peut appeler :
Vérifiez : pour activer ou désactiver le bouton.
SetText : pour modifier le texte du bouton.
La personnalisation peut être effectuée via les API standard de gestionnaire de fenêtrage.