CTRLBARS-Beispiel: Demonstriert benutzerdefinierte Steuerleisten

Aktualisiert: November 2007

Das CTRLBARS-Beispiel demonstriert eine Vielzahl verschiedener Optionen zum Anpassen von Steuerleisten:

  • Anordnen mehrerer Steuerleisten in einem Rahmenfenster, selektives Ein- und Ausblenden der Steuerleisten oder dynamisches Umordnen der Steuerelemente am Rand des Rahmenfensters. Den Steuerleisten ist entsprechend ihrer Z-Reihenfolge eine Position im Rahmenfenster zugeordnet. Anfänglich entspricht die Z-Reihenfolge der Reihenfolge, in der die Steuerelemente erstellt wurden (siehe auch CMainFrame::OnCreate). CTRLBARS ändert die Z-Reihenfolge der Dialogleisten mithilfe der CWnd::SetWindowPos-Funktion. Außerdem wird mithilfe der CWnd::ShowWindow-Funktion eine Steuerleiste ein- bzw. ausgeblendet. Bei jeder Änderung der Z-Reihenfolge bzw. jedem Ein- bzw. Ausblenden der Steuerleiste wird danach die CFrameWnd::RecalcLayout-Funktion aufgerufen, sodass das Fenster den verbleibenden sichtbaren Steuerleisten neu zugeordnet werden kann.

  • Anlegen benutzerdefinierter Symbolleisten, dynamisches Umordnen von Symbolleisten-Schaltflächen sowie Hinzufügen von Steuerelementen (z. B. eines Kombinationsfelds) zu einer Symbolleiste. Das CTRLBARS-Beispiel demonstriert zwei Möglichkeiten zum Anpassen einer Symbolleiste. Bei der ersten Symbolleiste (mit der Bezeichnung Tool Bar) kann zwischen einer kurzen (5 Schaltflächen) und einer langen Version (10 Schaltflächen) gewechselt werden. CTRLBARS ruft die CToolBar::SetButtonInfo-Funktion auf, um jede Schaltfläche einer bestimmten Position in der Symbolleistenbitmap zuzuordnen und einen bestimmten Befehl zu identifizieren. Anhand der zweiten Symbolleiste (mit der Bezeichnung Style) wird demonstriert, wie eine Symbolleisten-Schaltfläche (oder ein Trennzeichen) durch ein Steuerelement (in diesem Fall ein Kombinationsfeld) ersetzt wird. CMainFrame::CreateStyleBar erstellt eine Symbolleistentrennlinie mit einer Breite von 100 Pixel. Anschließend wird an der Stelle, die der Trennlinie zugeordnet wurde, ein untergeordnetes Kombinationsfeld (IDW_COMBO) erstellt.

  • Benutzerdefinierte Statusleiste, benutzerdefinierte Indikatoren und das Senden von Text an die Meldungszeile. In Statusleisten aktualisiert das Framework automatisch die Indikatoren für die FESTSTELL-, die NUM- oder die ROLLEN-TASTE, wenn Sie beispielsweise angeben, dass ID_INDICATOR_CAPS als einer der Indikatoren im indicators[ ]-Array an die CStatusBar::SetIndicators-Funktion übergeben wird. CTRLBARS demonstriert das Erweitern der Standardindikatoren für die Statusleiste durch den Überschreibmodus (ÜB), in den der Benutzer durch Betätigen der EINFG-TASTE wechseln kann. Hierfür ist ein Meldungshandler für den Befehl ID_TOGGLE_INSERT erforderlich (der der Taste VK_INSERT zugeordnet ist) sowie eine Ressourcenzeichenfolge (ID_INDICATOR_OVR) für den Text "ÜB", der angezeigt wird, wenn der Überschreibmodus aktiviert ist. Bei der Ressourcenkennung ID_INDICATOR_OVR handelt es sich um eine vordefinierte MFC-Konstante.

  • Eine Dialogleiste. Dies ist eine Steuerleiste, die durch eine Dialogfeldressourcenvorlage definiert wird. Wie bei allen Symbolleisten werden Benachrichtigungen von Steuerelementen auf der Dialogleiste an den Besitzer der Dialogleiste (d. h. das Hauptrahmenfenster) umgeleitet. Beispielsweise ist CMainFrame::OnSelChangePalette der Handler für die CBN_SELCHANGE-Benachrichtigung des Kombinationsfelds auf der Dialogleiste. CMainFrame verfügt außerdem über Handler für zwei der drei Kontrollkästchen zum Ein-/Ausblenden (Formate und Palette). Für das dritte Kontrollkästchen (Symbolleiste ein-/ausblenden) muss kein Handler geschrieben werden, da das Framework einen Standardhandler für ID_VIEW_TOOLBAR bereitstellt.

  • Eine unverankerte Symbolpalette, die sich wie eine Symbolleiste verhält aber ein zweidimensionales Array von Symbolleisten-Schaltflächen anzeigt und als nicht modales Fenster über dem Besitzerrahmenfenster schwebt. Die unverankerte Symbolpalette ist in einer wiederverwendbaren Klasse (CpaletteBar) implementiert, die aus CToolBar abgeleitet wurde. Durch die Ableitung aus CToolBar weist CPaletteBar auch Eigenschaften von Symbolleisten-Schaltflächen auf. Das in CPaletteBar implementierte palettenspezifische Verhalten beinhaltet die folgenden Komponenten:

    • Unverankertes (WS_POPUP) Fensterstil.

    • Zweidimensionale Anordnung der Symbolleisten-Schaltflächen in Zeilen und Spalten: Erstellen, Zeichnen und Trefferüberprüfung für Schaltflächen.

    • Dünne Titelleiste (ohne Text).

    • Verschiebbare Palette mit einem Positionierungsrechteck.

  • CTRLBARS demonstriert außerdem die Verwendung von ON_COMMAND_EX und ON_UPDATE_COMMAND_UI_RANGE. Viele der von CTRLBARS demonstrierten Optionen zur Anpassung der Steuerleiste werden unter Technischer Hinweis 31 erläutert.

Sicherheitshinweis:

Dieser Beispielcode dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird.

So rufen Sie Beispiele und Anweisungen für ihre Installation ab

  • Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.

    Weitere Informationen finden Sie unter Suchen von Beispieldateien.

  • Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.

  • Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.

Erstellen und Ausführen des Beispiels

So erstellen Sie das CTRLBARS-Beispiel und führen es aus

  1. Öffnen Sie die Projektmappe Ctrlbars.sln.

  2. Klicken Sie im Menü Erstellen auf Erstellen.

  3. Klicken Sie im Menü Debuggen auf Starten ohne Debuggen.

Beim erstmaligen Ausführen von CTRLBARS werden zunächst alle Steuerelemente angezeigt.

  • Unmittelbar unter der Menüleiste befindet sich eine Symbolleiste mit 5 Schaltflächen. Mithilfe der ersten Schaltfläche (mit dem dicken Aufwärtspfeil) kann zwischen einer kurzen (5 Schaltflächen) und einer langen Symbolleistenversion (10 Schaltflächen) gewechselt werden. Mit Ausnahme dieser ersten Schaltfläche (Short/Long) sowie der Schaltfläche Help (zum Öffnen des Dialogfelds Info) sind alle anderen Schaltflächen inaktiv.

  • Unmittelbar unter der ersten Symbolleiste befindet sich eine zweite. Mit den Schaltflächen dieser Symbolleiste (als Symbolleiste Styles bezeichnet) können Sie die folgenden Textausrichtungsformate festlegen: Left, Centered, Right oder Justified. Die Auswahl eines dieser Formate verändert lediglich den Zustand der Symbolleiste Styles und hat ansonsten keine weiteren Auswirkungen.

  • Im unteren Fensterbereich befindet sich die Statusleiste.

  • Über dem Fenster liegt eine unverankerte Palette mit 3 x 4 Symbolleisten-Schaltflächen.

  • Am linken Fensterrand befindet sich eine Dialogleiste. Bei dieser Steuerleiste handelt es sich deshalb um eine Dialogleiste, weil ihr Layout in einer Dialogfeldvorlagenressource (IDD_VIEW_SELECT) definiert ist.

Über das Menü View können Sie jede der vier ersten Steuerleisten ein- bzw. ausblenden. Die Dialogleiste ist immer sichtbar. Der Ansichtszustand der Steuerleisten Tools, Styles und Palette ist unmittelbar an den entsprechenden Kontrollkästchen auf der Dialogleiste erkennbar. Wenn Sie eine der Steuerleisten ein- oder ausblenden möchten, brauchen Sie einfach nur das jeweilige Kontrollkästchen zu aktivieren bzw. zu deaktivieren.

Mithilfe des Befehls Dlg Bar Top im Menü View können Sie die Anordnung der Steuerleisten so ändern, dass die Dialogleiste in der Z-Reihenfolge der Steuerleisten ganz oben angezeigt wird. Wenn die Dialogleiste an erster Stelle steht, wird sie unterhalb der Titel- und Menüleiste automatisch entlang dem gesamten linken Fensterrahmen erweitert. Beide Symbolleisten berühren die Dialogleiste am linken Rand. Wenn die Dialogleiste wieder an ihrer ursprünglichen Position in der Z-Reihenfolge angeordnet wird (hinter allen anderen Steuerleisten), berührt die Oberkante der Dialogleiste die Unterkante der zweiten Symbolleiste, und die Unterkante der Dialogleiste berührt die Oberkante der Statusleiste. Dies verdeutlicht den Basisalgorithmus, nach dem sich die Position der Steuerleisten aus der Z-Reihenfolge ihrer Erstellung ergibt.

Im Menü Style können Sie eines der folgenden vier Textausrichtungsformate festlegen: Left, Centered, Right oder Justified. Änderungen an dieser Einstellung werden sofort im Kombinationsfeld der Symbolleiste Styles und auf der entsprechenden Schaltfläche angezeigt. Entsprechend können Sie die Textausrichtung auch ändern, indem Sie die gewünschte Einstellung aus dem Kombinationsfeld auf der Symbolleiste Styles auswählen oder auf die jeweilige Schaltfläche klicken. Die neue Auswahl ist sofort am Zustand der anderen Steuerelemente sowie im Menü Style erkennbar.

Im Menü Palette können Sie die Anordnung der Tools in der Palette von 3 x 4 in 2 x 6 ändern.

Wenn Sie ein Tool aus der Palette auswählen, wird in der Meldungszeile der Statusleiste die Meldung "You have selected the <Typ> tool" angezeigt, wobei <Typ> angibt, welches der 12 verfügbaren Tools ausgewählt wurde. Der Name des ausgewählten Tools wird auch im Kombinationsfeld der Dialogleiste angezeigt. Entsprechend ist die Auswahl auch über dieses Kombinationsfeld möglich.

In der Statusleiste wird neben dem zuletzt verwendeten Tool auch der Status der EINFG-, NUM- und der FESTSTELLTASTE angezeigt.

Schlüsselwörter

Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:

AfxFormatString1; ; ; ; AfxThrowResourceException; ; CBrush::CreateSolidBrush; CCmdUI::ContinueRouting; ; CCmdUI::SetCheck; CCmdUI::SetText; CComboBox::AddString; CComboBox::Create; CComboBox::GetCurSel; CComboBox::GetLBText; CComboBox::SetCurSel; ; ; CDC::Attach; CDC::Detach; CDC::PatBlt; CDC::RectVisible; CDialogBar::Create; CDumpContext::GetDepth; CFont::CreateFontIndirect; ; ; CFrameWnd::SetMessageText; CGdiObject::Attach; ; ; CRect::Height; CRect::InflateRect; CRect::SetRectEmpty; CRect::Width; CStatusBar::Create; CStatusBar::GetPaneInfo; ; CStatusBar::SetPaneInfo; CString::LoadString; CToolBar::CToolBar; CToolBar::CommandToIndex; ; CToolBar::GetButtonInfo; CToolBar::GetItemID; CToolBar::GetItemRect; CToolBar::LoadBitmap; ; CToolBar::SetButtons; CToolBar::SetHeight; CToolBar::SetSizes; ; ; CWnd::ClientToScreen; CWnd::CreateEx; ; CWnd::GetClientRect; CWnd::GetDC; ; CWnd::GetOwner; CWnd::GetParentFrame; CWnd::GetSafeHwnd; CWnd::GetStyle; CWnd::GetWindowRect; CWnd::Invalidate; ; CWnd::OnCancelMode; CWnd::OnCreate; CWnd::OnLButtonDown; CWnd::OnLButtonUp; CWnd::OnMouseActivate; CWnd::OnMouseMove; CWnd::OnSysColorChange; ; CWnd::ReleaseDC; CWnd::SendMessage; ; CWnd::SetFont; ; ; ; CWnd::UpdateWindow; ; ; CreateCompatibleDC; CreateDIBitmap; ; ; ; ; ; ; FindResource; ; FreeResource; ; GetBValue; GetCapture; ; ; GetGValue; GetNextWindow; GetObjectType; ; GetRValue; GetStockObject; GetSysColor; GetSystemMetrics; GetVersion; ; HIBYTE; ; LOBYTE; ; ; LoadResource; LockResource; MAKEINTRESOURCE; OffsetRect; ; ; ; ; ; SendMessage; ; ; ; ; ; ; StretchDIBits; ; free; lstrcpy; ; ;

Hinweis:

In diesem und einigen anderen Beispielen wurden die Änderungen an den Visual C++-Assistenten, -Bibliotheken und -Compilern noch nicht nachvollzogen. Sie demonstrieren aber dennoch, wie Sie die gewünschte Aufgabe durchführen können.

Siehe auch

Weitere Ressourcen

MFC-Beispiele