Ancrer et rendre flottantes les barres d'outils
La bibliothèque de classes Microsoft Foundation prend en charge les barres d’outils ancres. Une barre d’outils pouvant être ancrée peut être attachée ou ancrée à n’importe quel côté de sa fenêtre parente, ou elle peut être détachée, ou flottante, dans sa propre fenêtre mini-frame. Cet article explique comment utiliser des barres d’outils ancres dans vos applications.
Si vous utilisez l’Assistant Application pour générer le squelette de votre application, vous êtes invité à choisir si vous souhaitez des barres d’outils ancres. Par défaut, l’Assistant Application génère le code qui effectue les trois actions nécessaires pour placer une barre d’outils ancre dans votre application :
Si l’une de ces étapes est manquante, votre application affiche une barre d’outils standard. Les deux dernières étapes doivent être effectuées pour chaque barre d’outils ancreable dans votre application.
Les autres rubriques abordées dans cet article sont les suivantes :
Consultez l’exemple MFC General DOCKTOOL pour obtenir des exemples.
Activation de l’ancrage dans une fenêtre Frame
Pour ancrer des barres d’outils dans une fenêtre frame, la fenêtre frame (ou destination) doit être activée pour autoriser l’ancrage. Cette opération est effectuée à l’aide de la fonction CFrameWnd ::EnableDocking , qui prend un paramètre DWORD qui est un ensemble de bits de style indiquant quel côté de la fenêtre frame accepte l’ancrage. Si une barre d’outils est sur le point d’être ancrée et qu’il existe plusieurs côtés auxquels elle peut être ancrée, les côtés indiqués dans le paramètre transmis EnableDocking
sont utilisés dans l’ordre suivant : haut, bas, gauche, droite. Si vous souhaitez pouvoir ancrer des barres de contrôle n’importe où, passez CBRS_ALIGN_ANY à EnableDocking
.
Activation de l’ancrage pour une barre d’outils
Une fois que vous avez préparé la destination pour l’ancrage, vous devez préparer la barre d’outils (ou source) de la même manière. Appelez CControlBar ::EnableDocking pour chaque barre d’outils que vous souhaitez ancrer, en spécifiant les côtés de destination auxquels la barre d’outils doit s’ancrer. Si aucun des côtés spécifiés dans l’appel ne correspond aux CControlBar::EnableDocking
côtés activés pour l’ancrage dans la fenêtre frame, la barre d’outils ne peut pas ancrer , elle flotte. Une fois qu’elle a été flottante, elle reste une barre d’outils flottante, incapable de s’ancrer dans la fenêtre frame.
Si l’effet souhaité est une barre d’outils flottante permanente, appelez EnableDocking
avec un paramètre de 0. Appelez ensuite CFrameWnd ::FloatControlBar. La barre d’outils reste flottante et ne peut pas s’ancrer en permanence n’importe où.
Ancrage de la barre d’outils
L’infrastructure appelle CFrameWnd ::D ockControlBar lorsque l’utilisateur tente de supprimer la barre d’outils d’un côté de la fenêtre frame qui autorise l’ancrage.
En outre, vous pouvez appeler cette fonction à tout moment pour ancrer des barres de contrôle dans la fenêtre frame. Cela est normalement effectué lors de l’initialisation. Plusieurs barres d’outils peuvent être ancrées sur un côté particulier de la fenêtre frame.
Flottant la barre d’outils
La détachement d’une barre d’outils ancre à partir de la fenêtre frame est appelée flottante dans la barre d’outils. Appelez CFrameWnd ::FloatControlBar pour ce faire. Spécifiez la barre d’outils à flotter, le point où elle doit être placée et un style d’alignement qui détermine si la barre d’outils flottante est horizontale ou verticale.
L’infrastructure appelle cette fonction lorsqu’un utilisateur fait glisser une barre d’outils hors de son emplacement ancré et le supprime dans un emplacement où l’ancrage n’est pas activé. Cela peut être n’importe où à l’intérieur ou à l’extérieur de la fenêtre cadre. Comme avec DockControlBar
, vous pouvez également appeler cette fonction pendant l’initialisation.
L’implémentation MFC des barres d’outils ancres ne fournit pas certaines des fonctionnalités étendues trouvées dans certaines applications qui prennent en charge les barres d’outils ancres. Les fonctionnalités telles que les barres d’outils personnalisables ne sont pas fournies.
Redimensionnement dynamique de la barre d’outils
À partir de Visual C++ version 4.0, vous pouvez permettre aux utilisateurs de votre application de redimensionner dynamiquement les barres d’outils flottantes. En règle générale, une barre d’outils a une forme longue, linéaire, affichée horizontalement. Mais vous pouvez modifier l’orientation de la barre d’outils et sa forme. Par exemple, lorsque l’utilisateur ancre une barre d’outils sur l’un des côtés verticaux de la fenêtre de cadre, la forme passe à une disposition verticale. Il est également possible de remodeler la barre d’outils en rectangle avec plusieurs lignes de boutons.
Vous pouvez :
Spécifiez le dimensionnement dynamique comme caractéristique de barre d’outils.
Spécifiez le dimensionnement fixe comme caractéristique de barre d’outils.
Pour fournir cette prise en charge, il existe deux nouveaux styles de barre d’outils à utiliser dans vos appels à la fonction membre CToolBar ::Create . Il s'agit de :
CBRS_SIZE_DYNAMIC barre de contrôle est dynamique.
CBRS_SIZE_FIXED barre de contrôle est fixe.
Le style dynamique de taille permet à votre utilisateur de redimensionner la barre d’outils pendant qu’elle flotte, mais pas pendant son ancrage. La barre d’outils « wraps » si nécessaire pour modifier la forme lorsque l’utilisateur fait glisser ses bords.
Le style fixe de taille conserve les états d’habillage d’une barre d’outils, en corrigeant la position des boutons dans chaque colonne. L’utilisateur de votre application ne peut pas modifier la forme de la barre d’outils. La barre d’outils s’encapsule à des emplacements désignés, tels que les emplacements des séparateurs entre les boutons. Elle conserve cette forme si la barre d’outils est ancrée ou flottante. L’effet est une palette fixe avec plusieurs colonnes de boutons.
Vous pouvez également utiliser CToolBar ::GetButtonStyle pour retourner un état et un style pour les boutons de vos barres d’outils. Le style d’un bouton détermine la façon dont le bouton s’affiche et comment il répond à l’entrée utilisateur ; l’état indique si le bouton est dans un état encapsulé.
Définition des positions de retour à la ligne pour une barre d’outils de style fixe
Pour une barre d’outils avec le style fixe de taille, désignez les index de bouton de barre d’outils auxquels la barre d’outils s’encapsule. Le code suivant montre comment procéder dans le remplacement de OnCreate
votre fenêtre frame principale :
// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);
// Do the same for other wrap locations ...
// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
// Call docking/floating functions as needed ...
L’exemple MFC General DOCKTOOL montre comment utiliser les fonctions membres des classes CControlBar et CToolBar pour gérer la disposition dynamique d’une barre d’outils. Consultez le fichier EDI To AR. CPP dans DOCKTOOL.