TN031: Schiebeleisten-Steuerelemente
Hinweis
Der folgende technische Hinweis wurde seit dem ersten Erscheinen in der Onlinedokumentation nicht aktualisiert.Daher können einige Verfahren und Themen veraltet oder falsch sein.Um aktuelle Informationen zu erhalten, wird empfohlen, das gewünschte Thema im Index der Onlinedokumentation zu suchen.
Dieser Hinweis beschreibt die Steuerleistenklassen in MFC: Allgemein der CControlBar, CStatusBar, CToolBar, CDialogBar und CDockBar.
CControlBar
ControlBar ist CWnd abgeleitete Klasse das:
Wird an den oberen bzw. unteren Rand eines Rahmenfensters ausgerichtet.
Die untergeordnete Elemente enthalten, die entweder HWND-basierte Steuerelemente (beispielsweise CDialogBar), oder Nicht- Aktivitätsbasierte Elemente HWND sind (beispielsweise, CToolBar, CStatusBar).
Steuerleisten unterstützen die zusätzlichen Formate:
Pin CBRS_TOP (Standard) die Steuerleiste zur oben.
CBRS_BOTTOM Pin die Steuerleiste zum Ende.
CBRS_NOALIGN ordnet nicht die Steuerleiste neu wenn das übergeordnete Element Größe ändert.
Die Klassen, die von CControlBar abgeleitet sind, stellen die Implementierungen:
Statusleiste CStatusBar Eine, Elemente sind die Statusleistenbereiche, die Text enthalten.
CToolBar Eine Symbolleiste, Elemente sind die Schaltflächen, die in einer Zeile angeordnet werden.
Symbolleiste ähnliche Frames CDialogBar Eine, die die Standardfensterkontrollen enthalten (erstellt aus einer Dialogfeldvorlagenressource).
CDockBar Eine allgemeine, Bereich für andere CControlBar abgeleiteter Objekte Andockfunktionen. Die speziellen Memberfunktionen und Variablen, die in der Klasse verfügbar sind, sind wahrscheinlich, in zukünftigen Versionen ändern.
Alle Steuerleistenobjekte/Fenster sind untergeordnete Fenster eines übergeordneten Rahmenfensters. Sie werden üblicherweise als gleichgeordnetes Element auf den Innenbereich der Frames hinzugefügt (beispielsweise, ein MDI-Client oder Ansicht). Die ID des untergeordneten Fensters eine Steuerleiste ist wichtig. Im Standardlayout der Steuerleiste funktioniert nur für Steuerleisten mit den IDs im Bereich von AFX_IDW_CONTROLBAR_FIRST in AFX_IDW_CONTROLBAR_LAST. Beachten Sie, dass, obwohl es einen Bereich von 256 Steuerleiste IDs gibt, die ersten 32 dieser Steuerleiste IDs speziell sind, da diese direkt durch die Seitenansichtsarchitektur unterstützt werden.
Die CControlBar-Klasse gibt Standardimplementierung für:
Ausrichten der Steuerleiste am Anfang, am Ende oder an jede Seite des Frames.
Zuordnen von Steuerelementarrays.
Unterstützen der Implementierung der abgeleiteten Klassen.
C++-Steuerleistenobjekte werden normalerweise als Member einer CFrameWnd abgeleiteten Klasse eingebettet und bereinigt werden, wenn das übergeordnete Element HWND und das Objekt zerstört werden. Wenn Sie einem Steuerleistenobjekt auf dem Heap zuordnen müssen, können Sie den m_bAutoDestruct-Member auf TRUE einfach festlegen, um die Steuerleiste "delete this" auszuführen, wenn HWND zerstört wird.
Hinweis
Wenn Sie Ihr eigenes CControlBar abgeleitete Klasse, anstelle mithilfe ein von MFC abgeleitete Klassen, wie CStatusBar, CToolBar oder CDialogBar erstellen, müssen Sie den Datenmember m_dwStyle festlegen.Dies kann in der Überschreibung von Erstellen ausgeführt werden:
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
m_dwStyle = dwStyle;
.
.
.
}
Steuerleisten-Layout-Algorithmus
Der Steuerleistenlayoutalgorithmus ist sehr einfach. Das Rahmenfenster sendet eine Nachricht WM_SIZEPARENT für alle untergeordneten Elemente im Steuerleistenbereich. Neben dieser Meldung wird ein Zeiger z Clientrechteck des übergeordneten Elements übergeben. Diese Meldung wird auf die Elemente in der Z-Reihenfolge gesendet. Die Steuerleistenuntergeordneten Treffertest verwenden diese Informationen, um zu positionieren und die Größe des Clientbereichs des übergeordneten Elements zu verringern. Das abschließende Rechteck, das für den normalen Clientbereich eingenommen wird (weniger Steuerleisten) wird verwendet, um das Hauptclientfenster (normalerweise ein MDI-Client, -Ansicht oder -Splitterfenster) zu positionieren.
Siehe CWnd::RepositionBars und CFrameWnd::RecalcLayout für weitere Details.
Private Windows-Meldungen MFC, einschließlich WM_SIZEPARENT, werden in Technischer Hinweis 24 dokumentiert.
CStatusBar
Eine Statusleiste ist eine Steuerleiste, die eine Zeile von Textausgabebereichen hat. Es gibt zwei gängige Möglichkeiten, Textausgabebereiche zu verwenden:
Als die Meldungszeile
, (beispielsweise die Standardmenühilfe-Meldungszeile). Auf diese werden normalerweise durch ein indiziertes zugegriffen basiertes 0
Als Statusanzeigen
, (beispielsweise die GROSSBUCHSTABEN-, NUM- und ROLLEN-Indikatoren). Auf diese werden normalerweise durch Zeichenfolge/Befehl ID zugegriffen
Die Schriftart für die Statusleiste ist 10 Punkt Ms Sans Serif (vorgeschrieben durch das Windows-Oberflächen-Anwendungs-Konzeptionshandbuch oder die beste Übereinstimmung der Schriftartenmapper eine proportionale Schriftart mit 10 Punkt Schweizern). Unter bestimmten Versionen von Windows, wie der japanischen Edition, sind auf Schriftarten, die ausgewählt werden, anders.
Die Farben, die in der Statusleiste verwendet werden, werden auch mit der Empfehlung des Windows-Oberflächen-Anwendungs-Konzeptionshandbuches konsistent. Diese Farben nicht hartcodiert und dynamisch in Reaktion auf Benutzeranpassung in der Systemsteuerung geändert.
Element |
Windows-Farbwert |
Standard RGB |
---|---|---|
Statusleistenhintergrund |
COLOR_BTNFACE |
RGB (192, 192, 192) |
Statusleistentext |
COLOR_BTNTEXT |
RGB (000, 000, 000) |
Statusleistenspitze/übrig Ränder |
COLOR_BTNHIGHLIGHT |
RGB (255, 255, 255) |
Statusleistenbot/-rechte Ränder |
COLOR_BTNSHADOW |
RGB (128, 128, 128) |
CCmdUI-Unterstützung für CStatusBar
Die Methode, die Leistungsindikatoren normalerweise aktualisiert werden, ist die ON_UPDATE_COMMAND_UI Mechanismus. Rechtzeitig Leerlaufzeit ruft die Statusleiste den Handler ON_UPDATE_COMMAND_UI mit der Indikatorbereichs Zeichenfolgen-ID des auf.
Der Handler kann ON_UPDATE_COMMAND_UI aufrufen:
Aktivieren: Um den Bereich aktivieren oder deaktivieren. Perspektive eines Bereichs ist nicht identisch einen aktivierten Bereich jedoch den Text nicht sichtbar werden (das heißt, den Textindikator ab).
SetText: Um den Text ändern. Seien Sie vorsichtig, wenn Sie dieses verwenden, da der Bereich nicht automatisch angepasst wird.
Siehe Klasse CStatusBar in der Class Library Reference Details darüber CStatusBar Erstellung und -Anpassung APIs. Die häufigste Anpassung aus Statusleisten sollte ausgeführt werden, bevor die Statusleiste zuerst eingeblendet wird.
Die Statusleiste unterstützt nur einen dehnbaren Bereich, normalerweise den ersten Bereich. Die Größe dieses Bereichs ist eigentlich eine Mindestgröße. Wenn die Statusleiste größer als die minimale Größe aller Bereiche ist, wird jede zusätzliche Breite zum dehnbaren Gültigkeitsbereich. Die Standardanwendung mit einer Statusleiste hat rechtsbündige Indikatoren für GROSSBUCHSTABEN, NUM- und ROLLEN, da der erste dehnbar Bereich ist.
CToolBar
Eine Symbolleiste ist eine Steuerleiste mit einer Zeile von Schaltflächen, die möglicherweise Trennzeichen einfügen. Zwei Stile von Schaltflächen werden unterstützt: PushButtons und Kontrollkästchenschaltflächen. Radiogruppenfunktionalität kann mit Kontrollkästchenschaltflächen und - ON_UPDATE_COMMAND_UI erstellt werden.
Alle Schaltflächen auf der Symbolleiste von einer Bitmap verwendet. Diese Bitmap muss ein Bild oder Symbol für jede Schaltfläche enthalten. In der Regel ist die Reihenfolge der Bilder/der Symbole in der Bitmap der Reihenfolge, die sie auf dem Bildschirm gezeichnet werden. (Dies kann mit der Anpassung APIs geändert werden.)
Jede Schaltfläche muss die gleiche Größe aufweisen. Der Standardwert ist Pixel die standardmäßigen 24x22. Jedes Bild/Symbol müssen die gleiche Größe sein und müssen in der Bitmap parallel sein. Das Standardbild/die Glyphengröße ist Pixel 16x15. Daher für eine Symbolleiste mit 10 Schaltflächen (mithilfe der Standardgrößen), ist eine Bitmap, die sich 160 Pixel breit und 15 Pixel hoch ist.
Jede Schaltfläche besitzt ein und nur ein Bild/Symbol. Die andere Schaltfläche zeigt an und Stile (beispielsweise, gedrückt, oben unten deaktiviert, unten deaktiviert, unbegrenzt) werden algorithmisch aus diesem ein Bild von/Symbolebene generieren. Jede Farbenbitmap oder DIB-Datei können in die Theorie verwendet werden. Der Algorithmus zum Generieren der verschiedenen Schaltflächenzustände bearbeitet besten, wenn das ursprüngliche Bild Grauschattierungen ist. Betrachten Sie die Standardsymbolleistenschaltflächen und die Symbolleistenschaltflächen-ClipArt, die in allgemeinen Beispiel CLIPART MFC für Beispiele bereitgestellt werden.
Die Farben, die in der Symbolleiste verwendet werden, werden auch mit der Empfehlung des Windows-Oberflächen-Anwendungs-Konzeptionshandbuches konsistent. Diese Farben nicht hartcodiert und dynamisch in Reaktion auf Benutzeranpassung in der Systemsteuerung geändert.
Element |
Windows-Farbwert |
Standard RGB |
---|---|---|
Symbolleistenhintergrund |
COLOR_BTNFACE |
RGB (192.192.192) |
Symbolleistenschaltflächenspitze/übrig Ränder |
COLOR_BTNHIGHLIGHT |
RGB (255.255.255) |
Symbolleistenschaltflächenbot/-rechte Ränder |
COLOR_BTNSHADOW |
RGB (128.128.128) |
Außerdem werden die Symbolleistenbitmapschaltflächen neu eingefärbt, als wenn sie Standard-Windows-Schaltflächen-Steuerelemente waren. Beim Neueinfärben Dies tritt auf, wenn die Bitmap aus der Ressource und als Reaktion auf eine Änderung an Systemfarben in Reaktion auf Benutzeranpassung in der Systemsteuerung geladen wird. Die folgenden Farben in einer Symbolleistenbitmap werden automatisch neu eingefärbt, sollte mit Vorsicht verwendet werden. Wenn kein Teil der neu eingefärbten Bitmaps haben möchten, verwenden Sie eine Farbe, die eng einen der zugeordneten RGB-Werte entspricht. Die Zuordnung besteht auf Grundlage der genauen RGB-Werte ausgeführt.
RGB-Wert |
Dynamisch zugeordneter Farbwert |
---|---|
RGB (000, 000, 000) |
COLOR_BTNTEXT |
RGB (128, 128, 128) |
COLOR_BTNSHADOW |
RGB (192, 192, 192) |
COLOR_BTNFACE |
RGB (255, 255, 255) |
COLOR_BTNHIGHLIGHT |
Siehe CToolBar der Klasse der Class Library Reference für Informationen über die CToolBar -Anpassung Erstellung und APIs. Die häufigste Anpassung von Symbolleisten sollte ausgeführt werden, bevor die Symbolleiste zuerst sichtbar hergestellt wird.
Die Anpassung APIs können verwendet werden, um die Schaltfläche IDs, Stile, Abstandhalterbreite anzupassen und das Bild/Symbol verwendet wird, für welche Schaltfläche. Standardmäßig müssen Sie nicht, um diese APIs zu verwenden.
CCmdUI-Unterstützung für CToolBar
Die Methode, die Symbolleistenschaltflächen stets aktualisiert werden, ist die ON_UPDATE_COMMAND_UI Mechanismus. Rechtzeitig Leerlaufzeit ruft die Symbolleiste ON_UPDATE_COMMAND_UI den Handler mit der Befehls-ID dieser Schaltfläche auf. ON_UPDATE_COMMAND_UI wird nicht für Trennzeichen aufgerufen, jedoch wird für PushButtons und Kontrollkästchenschaltflächen aufgerufen.
Der Handler kann ON_UPDATE_COMMAND_UI aufrufen:
Aktivieren: Um die Schaltfläche aktivieren oder deaktivieren. Dies funktioniert für PushButtons gleichmäßig und Kontrollkästchenschaltflächen.
SetCheck: So den Aktivierungszustand einer Schaltfläche festlegen. Das Aufrufen dieses für eine Symbolleisten-Schaltfläche wandelt es in eine Kontrollkästchenschaltfläche. SetCheck akzeptiert einen Parameter, der 0 (nicht aktiviert), 1 (überprüft) oder 2 sein kann (unendlich)
SetRadio: Kurznotation für SetCheck.
Kontrollkästchenschaltflächen sind "AUTOMATISCHE" Kontrollkästchenschaltflächen;, das heißt, wenn der Benutzer es drückt, ändern sie sofort Zustand. Checked ist der weiter oder der gedrückte Zustand. Es gibt keine integrierte Benutzeroberflächenmethode, eine Schaltfläche in "den unbestimmten" Zustand zu ändern; das muss durch Code durchgeführt werden.
Die Anpassung APIs, lassen Sie den Zustand einer angegebenen Symbolleisten-Schaltfläche, vorzugsweise Sie ändern sollten diese Zustände ON_UPDATE_COMMAND_UI im Handler für den Befehl ändern, den die Symbolleistenschaltfläche darstellt. Beachten Sie, dass Leerlaufverarbeitung ändert den Zustand von Symbolleisten-Schaltflächen mit dem ON_UPDATE_COMMAND_UI, sodass Handler wird möglicherweise alle Änderungen an den Zuständen, die von SetButtonStyle gemacht werden, das Bildlauffeld nach dem nächsten Leerlauf ab.
Symbolleistenschaltflächen senden WM_COMMAND Meldungen wie normale Schaltflächen oder Menüelemente und werden normalerweise von einem ON_COMMAND-Handler in der gleichen Klasse behandelt, die den ON_UPDATE_COMMAND_UI-Handler bereitstellt.
Es gibt vier Symbolleistenschaltflächenformate (TBBS_-Werte) wird für Anzeigenzustände:
TBBS_CHECKED: Kontrollkästchen ist derzeit aktiviert (unten).
TBBS_INDETERMINATE: Kontrollkästchen ist gerade unbestimmt.
TBBS_DISABLED: Schaltfläche wird gerade deaktiviert.
TBBS_PRESSED: Schaltfläche wird derzeit gedrückt.
Die sechs Beamter Windows-Oberflächen-Anwendungs-Konzeptionshandbuchschaltflächenformate werden durch die folgenden TBBS-Werte dargestellt:
Herauf = 0
Drücken der Maustaste TBBS_PRESSED (=| ein anderes Format)
Deaktiviert = TBBS_DISABLED
Unten = TBBS_CHECKED
Unten deaktiviert = TBBS_CHECKED | TBBS_DISABLED
Unbegrenzt = TBBS_INDETERMINATE
CDialogBar
Eine Dialogleiste ist eine Steuerleiste, die Standardwindows-steuerelemente enthält. Sie verarbeitet wie ein Dialogfeld, da sie die Steuerelemente enthält und Drücken der TAB-TASTE zwischen ihnen unterstützt. Sie fungiert auch wie ein Dialogfeld, da sie eine Dialogfeldvorlage verwendet, um die Anzeige optisch darzustellen.
CDialogBar wird für die Seitenansichtssymbolleiste verwendet, die Standardpushbutton-steuerelemente enthält.
Mit CDialogBar ist mit der Verwendung von CFormView. Sie müssen eine Dialogfeldvorlage für die Dialogleiste definieren und alle Formate mit Ausnahme von WS_CHILD entfernen. Beachten Sie, dass das Dialogfeld nicht angezeigt werden darf.
Die Steuerelementbenachrichtigungen für CDialogBar werden zum übergeordneten der Steuerleiste gesendet (so wie Symbolleisten-Schaltflächen).
CCmdUI-Unterstützung für CDialogBar
Dialogleistenschaltflächen sollten durch den ON_UPDATE_COMMAND_UI-Handlermechanismus aktualisiert werden. An der Leerlaufzeit ruft die Dialogleiste die Handler ON_UPDATE_COMMAND_UI mit der Befehls-ID aller Schaltflächen auf, die eine ID >= ein 0x8000 (d, im Bereich von Befehls-IDs).
Der Handler kann ON_UPDATE_COMMAND_UI aufrufen:
Aktivieren Sie: an die Schaltfläche aktivieren oder deaktivieren.
SetText: an Text der Schaltfläche ändern.
Anpassung kann durch Standardfenster-manager APIs durchgeführt werden.