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. Um sicherzustellen, dass die DLL geladen wird, verwenden Sie die InitCommonControlsEx-Funktion.

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

Sie senden Nachrichten an ein Registerkartensteuerelement, um Registerkarten hinzuzufügen und andernfalls die Darstellung und das Verhalten des Steuerelements zu beeinflussen. 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.

Stile des Registerkartensteuerelements

Sie können bestimmte Merkmale auf Registerkartensteuerelemente anwenden, indem Sie beim Erstellen des Steuerelements Stile für Registerkartensteuerelemente 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 den TCS _ BUTTONS-Stil angeben. Registerkarten in dieser Art von Registerkartensteuerelement sollten die gleiche Funktion wie Schaltflächensteuerelemente erfüllen. Das heißt, das Klicken auf eine Registerkarte sollte einen Befehl ausführen, anstatt eine Seite anzuzeigen. Da der Anzeigebereich in einem Schaltflächenregisterkarten-Steuerelement in der Regel nicht verwendet wird, wird kein Rahmen um ihn gezeichnet.

Sie können bewirken, dass eine Registerkarte den Eingabefokus erhält, wenn Sie auf klicken, indem Sie den TCS _ FOCUSONBUTTONDOWN-Stil angeben. Dieser Stil wird in der Regel nur mit dem TCS _ BUTTONS-Stil verwendet. Sie können angeben, dass eine Registerkarte keinen Eingabefokus erhält, wenn sie mithilfe des TCS _ FOCUSNEVER-Stils angeklickt wird.

Standardmäßig zeigt ein Registerkartensteuerelement nur eine Zeile mit Registerkarten an. Wenn nicht alle Registerkarten gleichzeitig angezeigt werden können, zeigt das Registerkarten-Steuerelement ein Auf-Ab-Steuerelement an, sodass der Benutzer zusätzliche Registerkarten anzeigen kann. Sie können bewirken, dass ein Registerkartensteuerelement bei Bedarf mehrere Zeilen von Registerkarten anzeigt, indem Sie den TCS _ MULTILINE-Stil angeben. Mit diesem Stil können alle Registerkarten gleichzeitig angezeigt werden. Die Registerkarten werden innerhalb jeder Zeile linksbündig ausgerichtet, es sei denn, Sie geben den TCS _ RIGHTJUSTIFY-Stil an. In diesem Fall wird die Breite jeder Registerkarte erhöht, sodass jede Zeile mit Registerkarten die gesamte Breite des Registerkartensteuerelements ausfüllt.

Ein Registerkartensteuerelement passt jede Registerkarte automatisch so an, dass sie ggf. ihrem Symbol und ihrer Bezeichnung entspricht. Um allen Registerkarten die gleiche Breite zu geben, können Sie den TCS _ FIXEDWIDTH-Stil angeben. Das Steuerelement passt alle Registerkarten an die breiteste Bezeichnung an, oder Sie können eine bestimmte Breite und Höhe mithilfe der TCM _ SETITEMSIZE-Meldung zuweisen. Innerhalb jeder Registerkarte zentrierung das Steuerelement das Symbol und die Bezeichnung, wobei das Symbol links neben der Bezeichnung platziert wird. Sie können das Symbol auf der linken Seite erzwingen und die Bezeichnung zentriert lassen, indem Sie den TCS _ FORCEICONLEFT-Stil angeben. Sie können das Symbol und die Bezeichnung nach links ausrichten, indem Sie den TCS _ FORCELABELLEFT-Stil verwenden. Sie können den TCS _ FIXEDWIDTH-Stil nicht mit dem TCS _ RIGHTJUSTIFY-Stil verwenden.

Sie können angeben, dass das übergeordnete Fenster die Registerkarten im Steuerelement zeichnet, indem Sie den TCS _ OWNERDRAWFIXED-Stil verwenden. Weitere Informationen finden Sie unter Vom Besitzer gezeichnete Registerkarten.

Sie können angeben, dass ein Registerkartensteuerelement ein QuickInfo-Steuerelement erstellt, indem Sie den TCS _ TOOLTIPS-Stil verwenden. Weitere Informationen hierzu finden Sie unter QuickInfos zum Registerkartensteuerelement.

Registerkarten und Registerkartenattribute

Jede Registerkarte in einem Registerkartensteuerelement besteht aus einem Symbol, einer Bezeichnung und anwendungsdefinierte Daten. Diese Informationen werden von einer 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.

Verwenden Sie zum Hinzufügen von Registerkarten zu einem Registerkartensteuerelement die TCM _ INSERTITEM-Nachricht, 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-Meldungen 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-Nachricht abrufen, eine Registerkarte mithilfe der TCM _ DELETEITEM-Nachricht löschen und alle Registerkarten in einem Registerkartensteuerelement löschen, indem Sie die TCM _ DELETEALLITEMS-Meldung verwenden.

Sie können jeder Registerkarte anwendungsdefinierte Daten zuordnen. Beispielsweise können Sie Informationen zu jeder Seite mit der entsprechenden Registerkarte speichern. Standardmäßig ordnet ein Registerkartensteuerelement vier zusätzliche Bytes pro Registerkarte für anwendungsdefinierte Daten zu. Sie können die Anzahl zusätzlicher Bytes pro Registerkarte ändern, indem Sie die TCM _ SETITEMEXTRA-Nachricht verwenden. Sie können diese Meldung nur verwenden, wenn das Registerkartensteuerelement leer ist.

Die anwendungsdefinierte Daten werden durch den lParam-Member der TCITEM-Struktur angegeben. Wenn Sie mehr als 4 Byte anwendungsdefinierte Daten verwenden, müssen Sie Ihre eigene Struktur definieren und anstelle von TCITEM verwenden. Sie können anwendungsdefinierte Daten auf die gleiche Weise abrufen und festlegen wie andere Informationen zu einer Registerkarte– mithilfe der TCM _ GETITEM- und TCM _ SETITEM-Meldungen.

Der erste Member Der Struktur muss eine TCITEMHEADER-Struktur sein, und die verbleibenden Member müssen anwendungsdefinierte Daten angeben. TCITEMHEADER ist mit TCITEMidentisch, mit der Ausnahme, dass es nicht über den lParam-Member 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, das die Fenstergröße und -position an den Anzeigebereich anpasst. Angesichts des Fensterrechtecks für ein Registerkartensteuerelement können Sie das umgrenzende Rechteck des Anzeigebereichs mithilfe der TCM _ ADJUSTRECT-Meldung berechnen.

Manchmal muss der Anzeigebereich eine bestimmte Größe haben, z. B. die Größe eines moduslosen untergeordneten Dialogfelds. Angesichts des umgrenzenden 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-Meldungen. Der TCN _ SELCHANGING-Benachrichtigungscode wird gesendet, bevor sich die Auswahl ändert, und der TCN SELCHANGE-Benachrichtigungscode _ wird nach der Änderung der Auswahl gesendet.

Sie können TCN _ SELCHANGING verarbeiten, um den Zustand der ausgehenden Seite zu speichern. Sie können TRUE zurückgeben, um zu verhindern, dass sich die Auswahl ändert. Beispielsweise möchten Sie möglicherweise nicht von einem untergeordneten Dialogfeld wechseln, in dem ein Steuerelement über eine ungültige Einstellung verfügt.

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 zerstört oder ausgeblendet 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-Nachrichten verwenden.

Bildlisten des Registerkartensteuerelements

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 ihm keine Bildliste zugeordnet. Eine Anwendung kann mithilfe der ImageList _ Create-Funktion eine Bildliste erstellen und sie dann mithilfe der TCM _ SETIMAGELIST-Nachricht einem Registerkartensteuerelement zuweisen.

Sie können Bilder der Bildliste eines Registerkartensteuerelements wie jeder anderen Bildliste hinzufügen. Allerdings sollte eine Anwendung Bilder mithilfe der TCM _ REMOVEIMAGE-Nachricht 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 Bildliste zerstört, die ihm zugeordnet ist. Sie müssen die Bildliste separat zerstören. Dies ist nützlich, wenn Sie mehreren Registerkartensteuerelementen dieselbe Bildliste zuweisen möchten.

Um das Handle für die 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 umgrenzende Rechteck einer Registerkarte abrufen oder bestimmen, welche Registerkarte sich an einer angegebenen Position befindet.

Für Steuerelemente mit fester Breite und vom Besitzer gezeichnete Registerkarten können Sie die genaue Breite und Höhe von Registerkarten mithilfe der TCM _ SETITEMSIZE-Meldung festlegen. 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 umgrenzende Rechteck für eine Registerkarte mithilfe der TCM _ GETITEMRECT-Nachricht bestimmen. Sie können mithilfe der TCM _ HITTEST-Nachricht ermitteln, welche Registerkarte sich an einem angegebenen Speicherort befindet.

In einem Registerkartensteuerelement mit dem TCS _ MULTILINE-Stil können Sie die aktuelle Anzahl von Zeilen von Registerkarten mithilfe der TCM _ GETROWCOUNT-Nachricht bestimmen.

Owner-Drawn Registerkarten

Wenn ein Registerkartensteuerelement über den TCS _ OWNERDRAWFIXED-Stil verfügt, muss das übergeordnete Fenster Registerkarten zeichnen, indem die WM _ DRAWITEM-Meldung 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 der itemData-Member von DRAWITEMSTRUCT den Wert des lParam-Elements der TCITEM-Struktur. Wenn Sie jedoch die Menge der anwendungsdefinierte Daten pro Registerkarte ändern, enthält itemData stattdessen die Adresse der Daten. Sie können die Menge der anwendungsdefinierte Daten pro Registerkarte ändern, indem Sie die TCM _ SETITEMEXTRA-Nachricht verwenden.

Um die Größe der Elemente in einem Registerkartensteuerelement anzugeben, muss das übergeordnete Fenster die WM _ MEASUREITEM-Meldung verarbeiten. Da alle Registerkarten in einem vom Besitzer gezeichneten Registerkartensteuerelement dieselbe Größe haben, wird diese Meldung nur einmal gesendet. Es gibt kein Registerkartensteuerelementformat für vom Besitzer gezeichnete Registerkarten unterschiedlicher Größe. Sie können die Breite und Höhe von Registerkarten auch mithilfe der TCM _ SETITEMSIZE-Nachricht festlegen.

QuickInfos für Registerkartensteuerelement

Sie können ein QuickInfo-Steuerelement verwenden, um eine kurze Beschreibung jeder Registerkarte 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 jeder Registerkarte auf Anforderung bereitzustellen.

Um dasselbe QuickInfo-Steuerelement mit mehreren Registerkartensteuerelement zu verwenden, erstellen Sie das QuickInfo-Steuerelement selbst, und weisen Sie es dem Registerkartensteuerelement mithilfe der TCM _ SETTOOLTIPS-Meldung zu. Sie können das Handle zum aktuellen QuickInfo-Steuerelement eines Registerkartensteuerelements abrufen, indem Sie die TCM _ GETTOOLTIPS-Nachricht verwenden. Wenn Sie ein eigenes QuickInfo-Steuerelement erstellen, sollten Sie nicht den TCS _ TOOLTIPS-Stil verwenden.

Standardmeldungsverarbeitung des Registerkartensteuerelements

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.

Message Ausgeführte Verarbeitung
WM _ CAPTURECHANGED Führt nichts aus, 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 der TCS _ TOOLTIPS-Stil angegeben ist.
WM _ DESTROY Gibt während der WM _ CREATE-Verarbeitung zugeordnete Ressourcen frei.
WM _ GETDLGCODE Gibt eine Kombination der WERTE DLGC _ WANTWS und DLGC _ WANTCHARS zurück.
WM _ GETFONT Gibt das Handle für die Schriftart zurück, die für Bezeichnungen verwendet wird.
WM _ KEYDOWN Verarbeitet Richtungsschlüssel und ändert ggf. die Auswahl.
WM _ KILLFOCUS Erklärt die Registerkarte, die den Fokus besitzt, für ungültig, sodass sie neu gepackt wird, um einen unfokussierten Zustand widerzuspiegeln.
WM _ LBUTTONDOWN Leitet die Nachricht ggf. an das QuickInfo-Steuerelement weiter und ändert die Auswahl, wenn der Benutzer auf eine Registerkarte klickt. Wenn der Benutzer auf eine Schaltfläche klickt, zeichnet das Steuerelement die Schaltfläche neu, um ein versenktes Aussehen zu geben, und erfasst die Maus. Wenn der Benutzer auf eine Registerkarte oder Schaltfläche klickt und der TCS _ FOCUSONBUTTONDOWN-Stil angegeben ist, legt das Steuerelement den Fokus auf sich selbst fest.
WM _ LBUTTONUP Gibt die Maus frei, wenn eine Schaltfläche 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 der 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 eine erhöhte oder abgesenkte Darstellung zu geben.
WM _ NOTIFY Leitet vom QuickInfo-Steuerelement gesendete Benachrichtigungscodes weiter.
WM _ PAINT Zeichnet einen Rahmen um den Anzeigebereich (es sei denn, der TCS _ BUTTONS-Stil ist angegeben) und zeichnet alle Registerkarten, die das ungültige Rechteck überschneiden. Für jede Registerkarte zeichnet sie den Text der Registerkarte (oder sendet eine WM _ DRAWITEM-Nachricht an das übergeordnete Fenster) und zeichnet dann einen Rahmen um die Registerkarte. Wenn der wParam-Parameter ungleich 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 Erklärt die Registerkarte mit dem Fokus für ungültig, sodass sie neu maliert wird, um einen fokussierten Zustand widerzuspiegeln.
WM _ SETFONT Legt die schriftart fest, die für Bezeichnungen verwendet wird.
WM _ SETREDRAW Legt den Zustand eines internen Flags fest, das bestimmt, ob das Steuerelement neu geschnitten wird, wenn Elemente eingefügt und gelöscht werden, wenn die Schriftart geändert wird usw.
_WM-GRÖßE Berechnet die Positionen von Registerkarten neu und macht möglicherweise einen Teil des Registerkartensteuerelements ungültig, um das erneute Anstrichen einiger oder aller Registerkarten zu erzwingen.