L'ancrage et barres d'outils flottante
La bibliothèque MFC supporte les barres d'outils ancrables. Il est possible d'attacher une barre d'outils ancrable à l'un des côtés de sa fenêtre parente mais aussi de la détacher, ou de la laisser flotter, dans sa propre fenêtre mini-frame. Cet article explique comment utiliser les barres d'outils ancrables dans vos applications.
Si vous utilisez l'Assistant d'Application pour générer la structure de votre application, vous êtes invité à sélectionner si vous souhaitez les barres d'outils ancrables. Par défaut, l'Assistant d'Application génère un code qui exécute les trois actions nécessaires pour placer une barre d'outils ancrable dans votre application :
Activez l'ancrage dans une fenêtre cadre.
Activez l'extrémité d'une barre d'outils.
Ancrez la barre d'outil (à la fenêtre cadre).
Si l'une de ces étapes est manquante, l'application affiche une barre d'outils standard. Les deux dernières étapes doivent être réalisées pour chacune des barres d'outils ancrables de votre application.
Les autres rubriques traitées dans cet article sont les suivantes :
Flottement de la barre d'outils
Redimensionner dynamiquement la barre d'outils
Définir les positions d'enveloppe d'une barre d'outils de style fixe
Consultez l'exemple général Mfc DOCKTOOL pour voir des exemples.
Activer l'ancrage dans une fenêtre cadre
Pour ancrer des barres d'outils dans une fenêtre cadre, la fenêtre cadre (ou destination) doit être activée pour permettre à l'ancrage. Cette opération s'effectue à l'aide de la fonction CFrameWnd::EnableDocking, qui accepte un paramètre de DWORD qui est un ensemble de bits de styles qui indique quel côté de la fenêtre cadre reçoit l'ancrage. Si une barre d'outils est sur le point d'être ancrée et qu'il y a plusieurs côtés à laquelle elle peut être ancrée, les côtés affichés dans le paramètre transmis à EnableDocking sont utilisés dans l'ordre suivant : supérieure, inférieure, gauche, droite. Si vous souhaitez pouvoir ancrer des barres de contrôle n'importe où, passez CBRS_ALIGN_ANY à EnableDocking.
Activer l'extrémité d'une barre d'outils
Après avoir préparé la destination d'ancrage, vous devez préparer la barre d'outils (ou la source) de la même manière. Appelez CControlBar::EnableDocking pour chaque barre d'outils que vous souhaitez ancrer, en spécifiant le ou les côtés de destination sur laquelle la barre d'outils doit s'ancrer. Si aucun des côtés spécifiés dans l'appel à CControlBar::EnableDocking ne correspond aux côtés activés pour l'ancrage dans la fenêtre frame, la barre d'outils ne peut pas être ancrée ; elle flottera. Dès qu'elle flotte, elle reste alors une barre d'outils flottante, incapable de s'ancrer à la fenêtre frame.
Si l'effet souhaité est une barre d'outils de flottement définitivement, appelez EnableDocking avec un paramètre de 0. Appelez ensuite CFrameWnd::FloatControlBar. La barre d'outils reste flottante, définitivement incapable de s'ancrer nulle part.
Ancrer la barre d'outils
L'infrastructure appelle CFrameWnd::DockControlBar lorsque l'utilisateur tente de supprimer la barre d'outils d'un côté de la fenêtre de cadre permettant l'ancrage.
En outre, vous pouvez appeler cette fonction à tout moment pour ancrer des barres de contrôles dans la fenêtre cadre. Ceci est généralement effectué pendant l'initialisation. Plusieurs barres d'outils peuvent être ancrée à un côté spécifique de la fenêtre cadre.
Flottement de la Barre d'outils
Détacher une barre d'outils ancrable dans la fenêtre cadre est appelé faire flotter la barre d'outils. Appelez CFrameWnd::FloatControlBar pour cela. Spécifiez la barre d'outils que vous voulez faire flotter, le point où elle doit se placer, 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 en dehors de son emplacement ancré et la lâche 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 appeler cette fonction pendant l'initialisation.
L'implémentation MFC des barres d'outils ancrables ne présente pas certaines des fonctionnalités étendues disponibles dans des applications qui prennent en charge les barres d'outils ancrables. Des fonctionnalités telles que les barres d'outils personnalisables ne sont pas fournies.
Redimensionner dynamiquement la barre d'outils
À compter de la version 4,0 de Visual C++, vous pouvez rendre possible aux utilisateurs de votre application de redimensionner les barres d'outils flottantes dynamiquement. En règle générale, une barre d'outils a une longue forme linéaire, affichée horizontalement. Vous pouvez modifier la forme de la barre d'outils et son orientation. Par exemple, lorsque l'utilisateur accueille une barre d'outils sur l'un des côtés verticaux de la fenêtre cadre, elle se met en page de façon verticale. Il est également possible de reformer la barre d'outils en un rectangle à plusieurs lignes de boutons.
Vous pouvez :
Spécifiez le dimensionnement dynamique comme caractéristique de la barre d'outils.
Spécifiez le dimensionnement fixe comme caractéristique de la barre d'outils.
Pour assurer la prise en charge, il existe deux styles de la barre d'outils à utiliser dans les appels à la fonction membre CToolBar::Create. Il s'agit des éléments suivants :
La barre de contrôle de CBRS_SIZE_DYNAMIC est dynamique.
La barre de contrôle de CBRS_SIZE_FIXED est fixe.
Le style de taille dynamique permet à l'utilisateur de redimensionner la barre d'outils lorsqu'elle flotte, mais pas lorsqu'elle est ancrée. La barre d'outils « enveloppe » ce qui est nécessaire pour se déformer lorsque l'utilisateur fait glisser ses extrémités.
Le style de taille fixe conserve les états d'enveloppe d'une barre d'outils, en fixant la position des boutons de chaque colonne. L'utilisateur de votre application ne peut pas modifier la forme de la barre d'outils. La barre d'outil enveloppe aux endroits désignés, tels que les emplacements des séparateurs entre les boutons. Elle maintient cette forme si la barre d'outils est ancrée ou flotte. Le résultat 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 les barres d'outils. Le style d'un bouton indique comment le bouton s'affiche et comment il répond à une entrée utilisateur ; l'état indique si le bouton est dans un état encapsulé.
Définir les positions d'enveloppe d'une barre d'outils de style fixe
Pour une barre d'outils avec le style de taille fixe, désignez les indexes de boutons de la barre d'outils dans lesquels la barre d'outils s'encapsulera. Le code suivant indique comment procéder dans la substitution de OnCreate dans votre fenêtre cadre 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 Général de MFC DOCKTOOL montre comment utiliser les fonctions membres des classes CControlBar et CToolBar pour gérer la mise en page dynamique d'une barre d'outils. Consultez le fichier EDITBAR.CPP dans DOCKTOOL.