Freigeben über


Informationen zu Registerkartensteuerelementen

Ein Registerkarten-Steuerelement entspricht in etwa einem Trennblatt in einem Notizbuch den Beschriftungen in einer Hängeregistratur. Durch Verwenden eines Registerkarten-Steuerelements können in einer Anwendung mehrere Seiten für denselben Bereich in einem Fenster oder Dialogfeld definiert werden. Jede Seite besteht aus einem bestimmten Informationstyp oder einer Gruppe von Steuerelementen, die die Anwendung anzeigt, wenn der Benutzer die entsprechende Registerkarte auswählt.

Der folgende Screenshot zeigt ein einfaches Registerkartensteuerelement, das Registerkarten für Wochentage enthält. Die Registerkarte Dienstag wurde ausgewählt.

Screenshot eines Eigenschaftenblatts mit fünf Registerkarten, eine für jeden Wochentag

Das Thema enthält folgende Abschnitte:

Erstellen von Registerkartensteuerelementen

Sie können ein Registerkartensteuerelement erstellen, indem Sie die CreateWindowEx-Funktion aufrufen und die WC_TABCONTROL Fensterklasse angeben. Diese Fensterklasse wird registriert, wenn die DLL für allgemeine Steuerelemente geladen wird. Verwenden Sie die Funktion InitCommonControlsEx , um sicherzustellen, dass die DLL geladen wird.

In Microsoft Visual Studio können Sie mithilfe der Toolbox ein Registerkartensteuerelement erstellen.

Sie senden Nachrichten an ein Registerkartensteuerelement, um Registerkarten hinzuzufügen und sich auf andere Weise auf die Darstellung und das Verhalten des Steuerelements zu auswirken. Jede Nachricht verfügt über ein entsprechendes Makro, das Sie verwenden können, anstatt die Nachricht explizit zu senden. Sie können eine einzelne Registerkarte in einem Registerkartensteuerelement nicht deaktivieren. Sie können jedoch ein Registerkartensteuerelement in einem Eigenschaftenblatt deaktivieren, indem Sie die entsprechende Seite deaktivieren.

Formatvorlagen für Registerkartensteuerelemente

Sie können bestimmte Merkmale auf Registerkartensteuerelemente anwenden, indem Sie beim Erstellen des Steuerelements Registerkartensteuerelementstile angeben. Beispielsweise können Sie die Ausrichtung und allgemeine Darstellung der Registerkarten in einem Registerkartensteuerelement angeben.

Sie können dazu führen, dass die Registerkarten wie Schaltflächen aussehen, indem Sie die TCS_BUTTONS Formatvorlage angeben. Registerkarten in diesem Typ von Registerkartensteuerelementen sollten dieselbe Funktion wie Schaltflächensteuerelemente haben. Das heißt, wenn Sie auf eine Registerkarte klicken, sollte ein Befehl ausgeführt werden, anstatt eine Seite anzuzeigen. Da der Anzeigebereich in einem Schaltflächenregister-Steuerelement in der Regel nicht verwendet wird, wird kein Rahmen um ihn herum gezeichnet.

Sie können bewirken, dass eine Registerkarte den Eingabefokus erhält, wenn sie darauf geklickt wird, indem Sie die TCS_FOCUSONBUTTONDOWN Formatvorlage angeben. Dieser Stil wird in der Regel nur mit der TCS_BUTTONS verwendet. Sie können angeben, dass eine Registerkarte keinen Eingabefokus erhält, wenn sie mit der TCS_FOCUSNEVER-Format angekliedet wird.

Standardmäßig zeigt ein Registerkartensteuerelement nur eine Zeile von Registerkarten an. Wenn nicht alle Registerkarten gleichzeitig angezeigt werden können, zeigt das Registerkartensteuerelement ein Nach-unten-Steuerelement an, damit der Benutzer weitere Registerkarten in die Ansicht scrollen kann. Sie können bewirken, dass ein Registerkartensteuerelement bei Bedarf mehrere Registerkartenzeilen anzeigt, indem Sie die TCS_MULTILINE Formatvorlage angeben. Mit diesem Stil können alle Registerkarten gleichzeitig angezeigt werden. Die Registerkarten sind in jeder Zeile linksbündig ausgerichtet, es sei denn, Sie geben die TCS_RIGHTJUSTIFY Formatvorlage an. In diesem Fall wird die Breite der einzelnen Registerkarten erhöht, sodass jede Zeile von Registerkarten die gesamte Breite des Registerkartensteuerelements ausfüllt.

Ein Registerkartensteuerelement passt die Größe der einzelnen Registerkarten automatisch an das entsprechende Symbol und die Zugehörige Bezeichnung an. Um allen Registerkarten die gleiche Breite zu geben, können Sie die TCS_FIXEDWIDTH Formatvorlage angeben. Das Steuerelement passt alle Registerkarten an die breiteste Bezeichnung an, oder Sie können mithilfe der TCM_SETITEMSIZE Meldung eine bestimmte Breite und Höhe zuweisen. Auf jeder Registerkarte zentriert das Steuerelement das Symbol und die Bezeichnung und platziert das Symbol links neben der Bezeichnung. Sie können das Symbol links erzwingen, wobei die Bezeichnung zentriert bleibt, indem Sie die TCS_FORCEICONLEFT Formatvorlage angeben. Sie können sowohl das Symbol als auch die Bezeichnung links ausrichten, indem Sie die TCS_FORCELABELLEFT Formatvorlage verwenden. Sie können die TCS_FIXEDWIDTH-Formatvorlage nicht mit der TCS_RIGHTJUSTIFY-Formatvorlage verwenden.

Sie können angeben, dass das übergeordnete Fenster die Registerkarten im Steuerelement zeichnet, indem Sie die TCS_OWNERDRAWFIXED Formatvorlage verwenden. Weitere Informationen finden Sie unter Vom Besitzer gezeichnete Registerkarten.

Sie können angeben, dass ein Registerkartensteuerelement ein QuickInfo-Steuerelement erstellt, indem Sie das format TCS_TOOLTIPS verwenden. Weitere Informationen hierzu finden Sie unter QuickInfos zur Registerkartensteuerung.

Registerkarten und Registerkartenattribute

Jede Registerkarte in einem Registerkartensteuerelement besteht aus einem Symbol, einer Bezeichnung und anwendungsdefinierte Daten. Diese Informationen werden durch eine TCITEM-Struktur angegeben. Sie können einem Registerkartensteuerelement Registerkarten hinzufügen, die Anzahl der Registerkarten abrufen, den Inhalt einer Registerkarte abrufen und festlegen und Registerkarten löschen. Registerkarten werden durch ihren nullbasierten Index identifiziert.

Wenn Sie einem Registerkartensteuerelement Registerkarten hinzufügen möchten, verwenden Sie die TCM_INSERTITEM Meldung, und geben Sie die Position des Elements und die Adresse einer TCITEM-Struktur an. Sie können den Inhalt einer vorhandenen Registerkarte abrufen und festlegen, indem Sie die TCM_GETITEM und TCM_SETITEM Nachrichten verwenden. Für jede Registerkarte können Sie ein Symbol, eine Bezeichnung oder beides angeben. Sie können auch anwendungsdefinierte Daten angeben, die der Registerkarte zugeordnet werden sollen.

Sie können die aktuelle Anzahl von Registerkarten mithilfe der TCM_GETITEMCOUNT-Meldung abrufen, eine Registerkarte mithilfe der TCM_DELETEITEM Nachricht löschen und alle Registerkarten in einem Registerkartensteuerelement mithilfe der TCM_DELETEALLITEMS Meldung löschen.

Sie können jeder Registerkarte anwendungsdefinierte Daten zuordnen. Sie können beispielsweise Informationen zu jeder Seite mit der entsprechenden Registerkarte speichern. Standardmäßig weist ein Registerkartensteuerelement vier zusätzliche Bytes pro Registerkarte für anwendungsdefinierte Daten zu. Sie können die Anzahl der zusätzlichen Bytes pro Registerkarte ändern, indem Sie die meldung TCM_SETITEMEXTRA verwenden. Sie können diese Meldung nur verwenden, wenn das Registerkartensteuerelement leer ist.

Die anwendungsdefinierte Daten werden vom lParam-Element der TCITEM-Struktur angegeben. Wenn Sie mehr als 4 Byte anwendungsdefinierter Daten verwenden, müssen Sie Ihre eigene Struktur definieren und diese anstelle von TCITEM verwenden. Sie können anwendungsdefinierte Daten auf die gleiche Weise abrufen und festlegen, wie Sie andere Informationen zu einer Registerkarte abrufen und festlegen– mithilfe der TCM_GETITEM und TCM_SETITEM Nachrichten.

Das erste Element Ihrer Struktur muss eine TCITEMHEADER-Struktur sein, und die verbleibenden Member müssen anwendungsdefinierte Daten angeben. TCITEMHEADER ist mit TCITEM identisch, mit der Ausnahme, dass es nicht über das lParam-Element verfügt. Der Unterschied zwischen der Größe Ihrer Struktur und der Größe von TCITEMHEADER sollte der Anzahl zusätzlicher Bytes pro Registerkarte entsprechen.

Anzeigebereich

Der Anzeigebereich eines Registerkartensteuerelements ist der Bereich, in dem eine Anwendung die aktuelle Seite anzeigt. In der Regel erstellt eine Anwendung ein untergeordnetes Fenster oder Dialogfeld und legt dabei die Größe und Position des Fensters so fest, dass sie dem Anzeigebereich entsprechen. Anhand des Fensterrechtecks für ein Registerkartensteuerelement können Sie das umgebende Rechteck des Anzeigebereichs mithilfe der TCM_ADJUSTRECT-Meldung berechnen.

Manchmal muss der Anzeigebereich eine bestimmte Größe aufweisen, z. B. die Größe eines moduslosen untergeordneten Dialogfelds. Angesichts des begrenzungsenden Rechtecks für den Anzeigebereich können Sie TCM_ADJUSTRECT verwenden, um das entsprechende Fensterrechteck für das Registerkartensteuerelement zu berechnen.

Registerkartenauswahl

Wenn der Benutzer eine Registerkarte auswählt, sendet ein Registerkartensteuerelement die Benachrichtigungscodes des übergeordneten Fensters in Form von WM_NOTIFY Nachrichten. Der TCN_SELCHANGING Benachrichtigungscode wird gesendet, bevor sich die Auswahl ändert, und der TCN_SELCHANGE Benachrichtigungscode wird gesendet, nachdem sich die Auswahl geändert hat.

Sie können TCN_SELCHANGING verarbeiten, um den Status der ausgehenden Seite zu speichern. Sie können TRUE zurückgeben, um zu verhindern, dass sich die Auswahl ändert. Beispielsweise können Sie nicht von einem untergeordneten Dialogfeld wegwechseln, in dem ein Steuerelement eine ungültige Einstellung aufweist.

Sie müssen TCN_SELCHANGE verarbeiten, um die eingehende Seite im Anzeigebereich anzuzeigen. Dies kann einfach dazu führen, dass die in einem untergeordneten Fenster angezeigten Informationen geändert werden. Häufiger besteht jede Seite aus einem untergeordneten Fenster oder Dialogfeld. In diesem Fall kann eine Anwendung diese Benachrichtigung verarbeiten, indem das ausgehende untergeordnete Fenster oder Dialogfeld gelöscht oder ausgeblendet wird und das eingehende untergeordnete Fenster oder Dialogfeld erstellt oder angezeigt wird.

Sie können die aktuelle Auswahl abrufen und festlegen, indem Sie die TCM_GETCURSEL und TCM_SETCURSEL Meldungen verwenden.

Bildlisten für Registerkartensteuerelemente

Jeder Registerkarte kann ein Symbol zugeordnet sein, das durch einen Index in der Bildliste für das Registerkartensteuerelement angegeben wird. Wenn ein Registerkartensteuerelement erstellt wird, ist keine Bildliste zugeordnet. Eine Anwendung kann mithilfe der ImageList_Create-Funktion eine Bildliste erstellen und sie dann mithilfe der TCM_SETIMAGELIST Meldung einem Registerkartensteuerelement zuweisen.

Sie können Der Bildliste eines Registerkartensteuerelements Bilder wie jeder anderen Bildliste hinzufügen. Eine Anwendung sollte jedoch Bilder mithilfe der TCM_REMOVEIMAGE-Meldung anstelle der ImageList_Remove-Funktion entfernen. Diese Meldung stellt sicher, dass jede Registerkarte demselben Bild wie zuvor zugeordnet bleibt.

Durch das Zerstören eines Registerkartensteuerelements wird keine zugehörige Bildliste zerstört. Sie müssen die Bildliste separat zerstören. Dies ist nützlich, wenn Sie dieselbe Bildliste mehreren Registerkartensteuerelementen zuweisen möchten.

Um das Handle der Bildliste abzurufen, die derzeit einem Registerkartensteuerelement zugeordnet ist, können Sie die TCM_GETIMAGELIST Nachricht verwenden.

Registerkartengröße und -position

Jede Registerkarte in einem Registerkartensteuerelement hat eine Größe und Position. Sie können die Größe von Registerkarten festlegen, das umgebende Rechteck einer Registerkarte abrufen oder bestimmen, welche Registerkarte sich an einer angegebenen Position befindet.

Bei Steuerelementen mit fester Breite und von Besitzern gezeichneter Registerkarten können Sie die genaue Breite und Höhe von Registerkarten festlegen, indem Sie die TCM_SETITEMSIZE Nachricht verwenden. In anderen Registerkartensteuerelementen wird die Größe jeder Registerkarte basierend auf dem Symbol und der Bezeichnung für die Registerkarte berechnet. Das Registerkartensteuerelement enthält Platz für einen Rahmen und einen zusätzlichen Rand. Sie können die Stärke des Rands mithilfe der TCM_SETPADDING Nachricht festlegen.

Sie können das aktuelle begrenzungsbasierte Rechteck für eine Registerkarte mithilfe der TCM_GETITEMRECT Nachricht bestimmen. Mithilfe der TCM_HITTEST Nachricht können Sie bestimmen, welche Registerkarte sich ggf. an einem angegebenen Speicherort befindet.

In einem Registerkartensteuerelement mit der TCS_MULTILINE-Format können Sie die aktuelle Anzahl von Zeilen von Registerkarten mithilfe der TCM_GETROWCOUNT Nachricht bestimmen.

Owner-Drawn Registerkarten

Wenn ein Registerkartensteuerelement die TCS_OWNERDRAWFIXED Format aufweist, muss das übergeordnete Fenster Registerkarten zeichnen, indem die WM_DRAWITEM Nachricht verarbeitet wird. Das Registerkartensteuerelement sendet diese Meldung immer dann, wenn eine Registerkarte gezeichnet werden muss. Der lParam-Parameter gibt die Adresse einer DRAWITEMSTRUCT-Struktur an, die den Index der Registerkarte, das umgebende Rechteck und den Gerätekontext (DC) enthält, in dem gezeichnet werden soll.

Standardmäßig enthält das itemData-Member von DRAWITEMSTRUCT den Wert des lParam-Elements der TCITEM-Struktur . Wenn Sie jedoch die Menge der anwendungsdefinierten Daten pro Registerkarte ändern, enthält itemData stattdessen die Adresse der Daten. Sie können die Menge der anwendungsdefinierten Daten pro Registerkarte ändern, indem Sie die TCM_SETITEMEXTRA Nachricht verwenden.

Um die Größe von Elementen in einem Registerkartensteuerelement anzugeben, muss das übergeordnete Fenster die WM_MEASUREITEM-Nachricht verarbeiten. Da alle Registerkarten in einem vom Besitzer gezeichneten Registerkartensteuerelement die gleiche Größe haben, wird diese Nachricht nur einmal gesendet. Es gibt keine Registerkartensteuerungsart für vom Besitzer gezeichnete Registerkarten mit unterschiedlicher Größe. Sie können auch die Breite und Höhe von Registerkarten festlegen, indem Sie die TCM_SETITEMSIZE Nachricht verwenden.

QuickInfos zur Registerkartensteuerung

Sie können ein QuickInfo-Steuerelement verwenden, um eine kurze Beschreibung der einzelnen Registerkarten in einem Registerkartensteuerelement bereitzustellen. Ein Registerkartensteuerelement mit dem TCS_TOOLTIPS Stil erstellt beim Erstellen ein QuickInfo-Steuerelement und zerstört das QuickInfo-Steuerelement, wenn es zerstört wird. Sie können auch ein QuickInfo-Steuerelement erstellen und es einem Registerkartensteuerelement zuweisen.

Wenn Sie ein QuickInfo-Steuerelement mit einem Registerkartensteuerelement verwenden, muss das übergeordnete Fenster den TTN_GETDISPINFO Benachrichtigungscode verarbeiten, um eine Beschreibung der einzelnen Registerkarten auf Anforderung bereitzustellen.

Um dasselbe QuickInfo-Steuerelement mit mehreren Registerkartensteuerelementen zu verwenden, erstellen Sie das QuickInfo-Steuerelement selbst, und weisen Sie es dem Registerkartensteuerelement mithilfe der TCM_SETTOOLTIPS-Nachricht zu. Sie können das Handle zum aktuellen QuickInfo-Steuerelement eines Registerkartensteuerelements mithilfe der TCM_GETTOOLTIPS-Nachricht abrufen. Wenn Sie ein eigenes QuickInfo-Steuerelement erstellen, sollten Sie nicht die TCS_TOOLTIPS-Format verwenden.

Standardregisterregistersteuerelement: Nachrichtenverarbeitung

In diesem Abschnitt wird die Nachrichtenverarbeitung beschrieben, die von einem Registerkartensteuerelement ausgeführt wird. Meldungen, die für Registerkartensteuerelemente spezifisch sind, werden in anderen Abschnitten dieser Dokumentation erläutert.

Nachricht Durchgeführte Verarbeitung
WM_CAPTURECHANGED Tut nichts, wenn das Registerkartensteuerelement die Mausaufnahme selbst freigegeben hat. Wenn ein anderes Fenster die Maus erfasst hat und eine Schaltfläche gedrückt gehalten wird, gibt der Befehl die Schaltfläche frei.
WM_CREATE Ordnet eine interne Datenstruktur zu und initialisiert sie. Das Steuerelement erstellt ein QuickInfo-Steuerelement, wenn die TCS_TOOLTIPS-Formatvorlage angegeben ist.
WM_DESTROY Gibt Ressourcen frei, die während WM_CREATE Verarbeitung zugewiesen wurden.
WM_GETDLGCODE Gibt eine Kombination aus den werten DLGC_WANTARROWS und DLGC_WANTCHARS zurück.
WM_GETFONT Gibt das Handle an die Schriftart zurück, die für Bezeichnungen verwendet wird.
WM_KEYDOWN Verarbeitet Richtungsschlüssel und ändert ggf. die Auswahl.
WM_KILLFOCUS Deaktiviert die Registerkarte mit dem Fokus, sodass sie neu gestrichen wird, um einen nicht fokussierten Zustand widerzuspiegeln.
WM_LBUTTONDOWN Leitet die Nachricht an das QuickInfo-Steuerelement weiter, falls vorhanden, und ändert die Auswahl, wenn der Benutzer auf eine Registerkarte klickt. Wenn der Benutzer auf eine Schaltfläche klickt, wird die Schaltfläche vom Steuerelement neu gezeichnet, um ein versunkenes Erscheinungsbild zu erhalten, und erfasst die Maus. Wenn der Benutzer entweder auf eine Registerkarte oder Schaltfläche klickt und die TCS_FOCUSONBUTTONDOWN Stil angegeben wird, legt das Steuerelement den Fokus auf sich selbst fest.
WM_LBUTTONUP Gibt die Maus los, wenn eine Taste gedrückt wurde. Wenn sich der Cursor über der Schaltfläche befindet und gedrückt gehalten wird, ändert das Steuerelement die Auswahl entsprechend und zeichnet die Schaltfläche neu.
WM_MOUSEMOVE Leitet die Nachricht ggf. an das QuickInfo-Steuerelement weiter. Wenn die TCS_BUTTONS Stil angegeben ist und die Maustaste nach dem Klicken gedrückt gehalten wird, kann das Steuerelement die betroffene Schaltfläche auch neu zeichnen, um ihr ein erhöhtes oder versunkenes Aussehen zu verleihen.
WM_NOTIFY Leitet Benachrichtigungscodes weiter, die vom QuickInfo-Steuerelement gesendet werden.
WM_PAINT Zeichnet einen Rahmen um den Anzeigebereich (es sei denn, die TCS_BUTTONS Formatvorlage wird angegeben) und zeichnet alle Registerkarten, die das ungültige Rechteck überschneiden. Für jede Registerkarte zeichnet sie den Textkörper der Registerkarte (oder sendet eine WM_DRAWITEM Nachricht an das übergeordnete Fenster) und zeichnet dann einen Rahmen um die Registerkarte. Wenn der wParam-Parameter nicht NULL ist, geht das Steuerelement davon aus, dass der Wert ein HDC ist, und zeichnet mit diesem Gerätekontext.
WM_RBUTTONDOWN Sendet einen NM_RCLICK Benachrichtigungscode an das übergeordnete Fenster.
WM_SETFOCUS Die Registerkarte mit dem Fokus wird ungültig, sodass sie neu gestrichen wird, um einen fokussierten Zustand widerzuspiegeln.
WM_SETFONT Legt die Schriftart fest, die für Bezeichnungen verwendet wird.
WM_SETREDRAW Legt den Status eines internen Flags fest, das bestimmt, ob das Steuerelement neu gestrichen wird, wenn Elemente eingefügt und gelöscht werden, wenn die Schriftart geändert wird usw.
WM_SIZE Berechnet die Positionen von Registerkarten neu und kann einen Teil des Registerkartensteuerelements ungültig machen, um das Neulackieren einiger oder aller Registerkarten zu erzwingen.