Partager via


CTRLBARS, exemple : illustre les barres de contrôles personnalisés

Mise à jour : novembre 2007

L'exemple CTRLBARS illustre une grande variété d'options de personnalisation des barres de contrôles :

  • Barres de contrôles multiples dans une fenêtre frame, masquage et affichage sélectif des barres de contrôles et réorganisation dynamique des contrôles le long de la bordure de la fenêtre frame. De l'espace est alloué aux barres de contrôles dans la fenêtre frame en fonction de leur ordre de plan, qui correspond initialement à leur ordre de création (consultez CMainFrame::OnCreate). CTRLBARS modifie l'ordre de plan de la barre de boîte de dialogue à l'aide de la fonction CWnd::SetWindowPos. Il masque ou affiche une barre de contrôles à l'aide de CWnd::ShowWindow. Chaque fois que CTRLBARS modifie l'ordre de plan, ou qu'il masque ou affiche une barre de contrôles, il appelle ensuite CFrameWnd::RecalcLayout afin que l'état réel de la fenêtre soit réalloué aux barres de contrôles visibles restantes.

  • Barres d'outils personnalisées, réorganisation dynamique des boutons dans la barre d'outils et ajout de contrôles (zone de liste déroulante par exemple) à une barre d'outils. CTRLBARS illustre deux méthodes de personnalisation d'une barre d'outils. La première barre d'outils, Toolbar, modifie l'organisation des boutons selon deux critères de choix : court (5 boutons) ou long (10 boutons). CTRLBARS appelle CToolBar::SetButtonInfo pour chaque bouton, afin de le mapper vers un emplacement en mosaïque sur la bitmap de la barre d'outils et de l'associer à une commande. La seconde barre d'outils, Style Bar, illustre le remplacement d'un bouton de barre d'outils (ou séparateur) à l'aide d'un contrôle (une zone de liste déroulante dans cet exemple). CMainFrame::CreateStyleBar crée un séparateur de barre d'outils de 100 pixels de large. Il crée ensuite la zone de liste déroulante (IDW_COMBO) en tant qu'enfant de la barre d'outils, puis définit sa position pour qu'elle occupe l'espace qui vient d'être alloué au séparateur.

  • Barre d'état personnalisée, indicateurs personnalisés et envoi de texte vers la ligne de message. Pour les barres d'état, l'infrastructure met à jour automatiquement un indicateur CAP LOCK, NUM LOCK ou SCROLL LOCK, si vous spécifiez par exemple ID_INDICATOR_CAPS en tant qu'identification passée dans le tableau indicators[ ] à CStatusBar::SetIndicators. CTRLBARS illustre l'extension des indicateurs de barre d'état standard à l'aide du mode Refrappe (RFP), que l'utilisateur peut activer ou désactiver à l'aide de la touche INSER. Cela nécessite un gestionnaire de messages pour la commande ID_TOGGLE_INSERT (mappée vers la touche VK_INSERT) et une chaîne de ressources (ID_INDICATOR_OVR) pour permettre l'affichage du texte "RFP" lorsque le mode Refrappe est activé. L'identificateur de ressource ID_INDICATOR_OVR est une constante MFC prédéfinie.

  • Barre de boîte de dialogue, qui est une barre de contrôles dont la présentation est définie par un modèle de ressource de boîte de dialogue. Comme pour toutes les barres de contrôles, les notifications des contrôles de la barre de boîte de dialogue sont routées vers le propriétaire de la barre de boîte de dialogue, en l'occurrence, la fenêtre frame principale. Par exemple, CMainFrame::OnSelChangePalette représente le gestionnaire de la notification CBN_SELCHANGE du contrôle de zone de liste déroulante dans une barre de boîte de dialogue. CMainFrame possède également des gestionnaires pour deux des trois cases à cocher Hide/Show (Styles et Palette). Il n'est pas nécessaire d'écrire un gestionnaire pour la troisième case à cocher, barre d'outils Hide/Show, car l'infrastructure offre un gestionnaire standard pour ID_VIEW_TOOLBAR.

  • Palette d'outils flottante, qui se comporte comme une barre d'outils, mais qui affiche un tableau en deux dimensions de boutons outils et flotte comme une fenêtre non modale au-dessus de la fenêtre frame propriétaire. La palette d'outils flottante est implémentée dans une classe réutilisable, CPaletteBar, dérivée de CToolBar. La dérivation de CToolBar donne à CPaletteBar un comportement de bouton de barre d'outils. Le comportement spécifique aux palettes implémenté dans CPaletteBar comprend les éléments suivants :

    • Style de fenêtre flottante (WS_POPUP).

    • Disposition en deux dimensions des boutons outils sous forme de lignes et de colonnes : création, peinture et test des boutons.

    • Barre de titre fine (sans texte).

    • Palette mobile utilisant un rectangle de suivi.

  • CTRLBARS illustre également l'utilisation de ON_COMMAND_EX et de ON_UPDATE_COMMAND_UI_RANGE. De nombreuses options de personnalisation de la barre de contrôles illustrées par CTRLBARS sont traitées dans la note technique 31.

Note de sécurité :

Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues.

Pour obtenir des exemples et des instructions d'installation :

  • Dans le menu ? (Aide) de Visual Studio, cliquez sur Exemples.

    Pour plus d'informations, consultez Recherche des fichiers d'exemple.

  • La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page Visual Studio 2008 Samples.

  • Des exemples sont également disponibles sur le disque dur de votre ordinateur. Des exemples et un fichier Readme sont stockés par défaut dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont disponibles en ligne.

Génération et exécution de l'exemple

Pour générer et exécuter l'exemple CTRLBARS

  1. Ouvrez la solution Ctrlbars.sln.

  2. Dans le menu Générer, cliquez sur Générer.

  3. Dans le menu Déboguer, cliquez sur Exécuter sans débogage.

Lorsque vous exécutez CTRLBARS pour la première fois, tous les contrôles sont visibles.

  • Une barre d'outils de 5 boutons est affichée juste en dessous de la barre de menus. Le premier bouton (flèche épaisse vers le haut) permet de modifier l'organisation des boutons de la barre d'outils selon deux critères de choix : "court" (5 boutons) et "long" (10 boutons). Les boutons sont toujours inactifs à l'exception du premier bouton Short/Long et du bouton Help, qui ouvre la boîte de dialogue About.

  • Une seconde barre d'outils est affichée juste en dessous de la première. Cette barre d'outils, appelée Style Bar, permet de spécifier l'un des styles d'alignement de texte suivants : gauche, centré, droit, justifié. La sélection de l'un de ces styles a pour seul effet de modifier l'état de la Style Bar.

  • Une barre d'état est affichée au bas de la fenêtre.

  • Une palette flottante, comportant un tableau (3 par 4) de boutons outils, est affichée en haut de la fenêtre.

  • Une barre de boîte de dialogue est affichée sur la bordure gauche de la fenêtre. Il s'agit d'une barre de boîte de dialogue parce que la présentation de cette barre de contrôles est définie dans une ressource de modèle de boîte de dialogue (IDD_VIEW_SELECT).

Le menu View vous permet de masquer ou d'afficher n'importe laquelle des quatre premières barres de contrôles. La barre de boîte de dialogue est toujours visible. L'état masqué ou affiché des barres de contrôles Outils, Styles et Palette est immédiatement reflété par les cases à cocher Hide/Show de la barre de boîte de dialogue. Vous pouvez également masquer ou afficher l'une des autres barres de contrôles en activant ou en désactivant sa case à cocher.

Grâce à la commande Dlg Bar Top du menu View, vous pouvez réorganiser les barres de contrôles de telle sorte que la barre de boîte de dialogue soit située en haut de l'ordre de plan des barres de contrôles. Une fois la barre de boîte de dialogue placée en première position, elle s'étend tout le long de la bordure gauche de la fenêtre, à l'exception des barres de menus et de titre. Les extrémités gauches des deux barres d'outils touchent la barre de boîte de dialogue. Lorsque la barre de boîte de dialogue retourne à sa position d'origine dans l'ordre de plan (après toutes les autres barres de contrôles), la partie supérieure de la barre de boîte de dialogue touche l'extrémité inférieure de la seconde barre d'outils, et la partie inférieure de la barre de boîte de dialogue touche l'extrémité supérieure de la barre d'état. Ce processus reflète un algorithme de base : l'état réel de la fenêtre est alloué aux barres de contrôles selon la règle du « premier arrivé, premier servi ».

Le menu Style vous permet de sélectionner l'un des quatre styles d'alignement de texte suivants : Left, Centered, Right, ou Justified. Les sélections effectuées sont immédiatement reflétées dans la zone de liste déroulante de la Style Bar, ainsi que dans le bouton correspondant. De même, vous pouvez effectuer une sélection en choisissant l'un des styles de la zone de liste déroulante Style Bar ou en appuyant sur l'un des quatre boutons. La nouvelle sélection est immédiatement reflétée dans les états des autres contrôles, ainsi que dans le menu Style.

Le menu Palette vous permet de modifier la disposition des outils de la palette pour passer de 3 par 4 à 2 par 6.

Lorsque vous sélectionnez un outil dans la Palette, la ligne de message de la barre d'état affiche "Vous avez sélectionné l'outil <type>", où <type> indique l'outil que vous avez sélectionné parmi 12 possibilités. Cette sélection est reflétée dans la zone de liste déroulante de la barre de boîte de dialogue. Vous pouvez également sélectionner un outil à l'aide de cette zone de liste déroulante.

La barre d'état n'affiche pas seulement le dernier outil sélectionné, elle indique également l'état des trois touches INSER, VERR. MAJ et VERR. NUM.

Mots clés

Cet exemple illustre l'utilisation des mots clés suivants :

AfxFormatString1 ; AfxGetApp ; AfxIsValidAddress ; AfxRegisterWndClass ; AfxThrowResourceException ; BitBlt ; CBrush::CreateSolidBrush ; CCmdUI::ContinueRouting ; CCmdUI::Enable ; CCmdUI::SetCheck ; CCmdUI::SetText ; CComboBox::AddString ; CComboBox::Create ; CComboBox::GetCurSel ; CComboBox::GetLBText ; CComboBox::SetCurSel ; CControlBar::GetBarStyle ; CControlBar::SetBarStyle ; CDC::Attach ; CDC::Detach ; CDC::PatBlt ; CDC::RectVisible ; CDialogBar::Create ; CDumpContext::GetDepth ; CFont::CreateFontIndirect ; CFrameWnd::LoadFrame ; CFrameWnd::RecalcLayout ; CFrameWnd::SetMessageText ; CGdiObject::Attach ; CObject::AssertValid ; CObject::Dump ; CRect::Height ; CRect::InflateRect ; CRect::SetRectEmpty ; CRect::Width ; CStatusBar::Create ; CStatusBar::GetPaneInfo ; CStatusBar::SetIndicators ; CStatusBar::SetPaneInfo ; CString::LoadString ; CToolBar::CToolBar ; CToolBar::CommandToIndex ; CToolBar::Create ; CToolBar::GetButtonInfo ; CToolBar::GetItemID ; CToolBar::GetItemRect ; CToolBar::LoadBitmap ; CToolBar::SetButtonInfo ; CToolBar::SetButtons ; CToolBar::SetHeight ; CToolBar::SetSizes ; CWinApp::InitInstance ; CWinApp::OnIdle ; CWnd::ClientToScreen ; CWnd::CreateEx ; CWnd::GetCapture ; CWnd::GetClientRect ; CWnd::GetDC ; CWnd::GetDlgItem ; CWnd::GetOwner ; CWnd::GetParentFrame ; CWnd::GetSafeHwnd ; CWnd::GetStyle ; CWnd::GetWindowRect ; CWnd::Invalidate ; CWnd::InvalidateRect ; CWnd::OnCancelMode ; CWnd::OnCreate ; CWnd::OnLButtonDown ; CWnd::OnMouseActivate ; CWnd::OnMouseMove ; CWnd::OnSysColorChange ; CWnd::PreCreateWindow ; CWnd::ReleaseDC ; CWnd::SendMessage ; CWnd::SetCapture ; CWnd::SetFont ; CWnd::SetWindowPos ; CWnd::ShowWindow ; CWnd::UpdateDialogControls ; CWnd::UpdateWindow ; CreateBitmap ; CreateCompatibleBitmap ; CreateCompatibleDC ; CreateDIBitmap ; CreatePatternBrush ; CreatePen ; CreateSolidBrush ; DeleteDC ; DeleteObject ; FillRect ; FindResource ; FrameRect ; FreeResource ; GetActiveWindow ; GetBValue ; GetCapture ; GetDC ; GetDeviceCaps ; GetGValue ; GetNextWindow ; GetObjectType ; GetParent ; GetRValue ; GetStockObject ; GetSysColor ; GetSystemMetrics ; GetVersion ; GetWindow ; HIBYTE ; InvertRect ; LOBYTE ; LoadCursor ; LoadIcon ; LoadResource ; LockResource ; MAKEINTRESOURCE ; OffsetRect ; PatBlt ; RGB ; ReleaseCapture ; ReleaseDC ; SelectObject ; SendMessage ; SetActiveWindow ; SetBkColor ; SetCapture ; SetROP2 ; SetRect ; SetTextColor ; StretchDIBits ; UpdateWindow ; free ; lstrcpy ; malloc ; memcpy ; memset

Remarque :

Certains exemples, tels que celui-ci, n'ont pas été modifiés pour refléter les changements apportés aux Assistants, aux bibliothèques et au compilateur Visual C++, mais ils illustrent bien l'exécution de la tâche souhaitée.

Voir aussi

Autres ressources

Exemples MFC