Informationen zu Headersteuerelementen
Ein Headersteuerelement ist ein Fenster, das in der Regel über Text- oder Zahlenspalten positioniert ist. Sie enthält einen Titel für jede Spalte und kann in Teile unterteilt werden. Der Benutzer kann die Teiler ziehen, die die Teile trennen, um die Breite der einzelnen Spalten festzulegen. Die folgende Abbildung zeigt ein Headersteuerelement mit beschrifteten Spalten, die ausführliche Informationen zu Dateien in einem Verzeichnis enthalten.

Sie können ein Headersteuerelement erstellen, indem Sie die CreateWindowEx-Funktion verwenden, indem Sie die WC _ HEADER-Fensterklasse und die entsprechenden Headersteuerelementstileangeben. Diese Fensterklasse wird registriert, wenn die allgemeine Steuerelement-DLL geladen wird. Um sicherzustellen, dass diese DLL geladen wird, verwenden Sie die InitCommonControlsEx-Funktion. Nachdem Sie ein Headersteuerelement erstellt haben, können Sie es in Teile unterteilen, den Text in jedem Teil festlegen und die Darstellung des Fensters mithilfe von Headerfenstermeldungen steuern.
Ein Headersteuerelement kann als untergeordnetes Fenster eines anderen Steuerelements erstellt werden, z. B. als Listenfeld. Das übergeordnete Steuerelement kennt das Headersteuerelement jedoch nicht und lässt den vom Header verwendeten Speicherplatz nicht zu, sodass Listenelemente hinter dem Header angezeigt werden. Wenn Sie ein Headersteuerelement in einem Listenfeld oder einem anderen Steuerelement verwenden möchten, muss das übergeordnete Steuerelement vom Besitzer gezeichnet werden, damit alle Elemente an der richtigen Position angezeigt werden.
Listenansichtssteuerelemente verfügen bereits über Headersteuerelemente. Anstatt ein Headersteuerelement für ein Listenansichtssteuerelement zu erstellen, verwenden Sie LVM _ GETHEADER oder ListView _ GetHeader, um das vorhandene Steuerelement abzurufen.
- Größe und Position des Headersteuerelements
- Elemente
- Vom Besitzer gezeichnete Headersteuerelemente
- Headersteuerelementfilter
- Standardverarbeitung von Headersteuerelementnachrichten
Größe und Position des Headersteuerelements
In der Regel müssen Sie die Größe und Position eines Headersteuerelements so festlegen, dass es in die Grenzen eines bestimmten Rechtecks passt, z. B. in den Clientbereich eines Fensters. Mithilfe der HDM _ LAYOUT-Nachricht können Sie die entsprechenden Größen- und Positionswerte aus dem Headersteuerelement abrufen.
Beim Senden von HDM _ LAYOUTgeben Sie die Adresse einer HDLAYOUT-Struktur an, die die Koordinaten des Rechtecks enthält, das das Headersteuerelement belegen soll, und stellt einen Zeiger auf eine WINDOWPOS-Struktur bereit. Das Steuerelement füllt die WINDOWPOS-Struktur mit Größen- und Positionswerten, die für die Positionierung des Steuerelements am oberen Rand des angegebenen Rechtecks geeignet sind. Der Höhenwert ist die Summe der Höhe der horizontalen Rahmen des Steuerelements und der durchschnittlichen Höhe der Zeichen in der Schriftart, die derzeit im Gerätekontext des Steuerelements ausgewählt ist.
Wenn Sie HDM _ LAYOUT verwenden möchten, um die Anfangsgröße und Position eines Headersteuerelements festzulegen, legen Sie den anfänglichen Sichtbarkeitszustand des Steuerelements so fest, dass es ausgeblendet wird. Nach dem Senden von HDM _ LAYOUT zum Abrufen der Größen- und Positionswerte können Sie die Funktion SetWindowPos verwenden, um die neue Größe, Position und den Sichtbarkeitszustand festzulegen.
Elemente
Ein Headersteuerelement verfügt in der Regel über mehrere Headerelemente, die die Spalten des Steuerelements definieren. Sie fügen einem Headersteuerelement ein Element hinzu, indem Sie die HDM _ INSERTITEM-Nachricht an das Steuerelement senden. Die Nachricht enthält die Adresse einer HDITEM-Struktur. Diese Struktur definiert die Eigenschaften des Headerelements, das eine Zeichenfolge, ein Bitmapbild, eine Anfangsgröße und einen anwendungsdefinierten LPARAM-Wert enthalten kann.
Der fmt-Member der HDITEM-Struktur eines Elements kann entweder das HDF _ STRING- oder HDF _ BITMAP-Flag enthalten, um anzugeben, ob das Steuerelement die Zeichenfolge oder Bitmap des Elements anzeigt. Wenn Sie sowohl eine Zeichenfolge als auch eine Bitmap anzeigen möchten, erstellen Sie ein vom Besitzer gezeichnetes Element, indem Sie das FMT-Element so festlegen, dass es das HDF _ OWNERDRAW-Flag enthält. Die HDITEM-Struktur gibt auch Formatierungsflags an, die dem Steuerelement mitteilen, ob die Zeichenfolge oder Bitmap im Rechteck des Elements zentriert, links ausgerichtet oder rechts ausgerichtet werden soll.
HDM _ INSERTITEM gibt den Index des neu hinzugefügten Elements zurück. Sie können den Index in anderen Nachrichten verwenden, um Eigenschaften festzulegen oder Informationen zum Element abzurufen. Sie können ein Element löschen, indem Sie die HDM _ DELETEITEM-Nachricht verwenden und den Index des zu löschenden Elements angeben.
Sie können die HDM _ SETITEM-Nachricht verwenden, um die Eigenschaften eines vorhandenen Headerelements festzulegen, und die HDM _ GETITEM-Nachricht, um die aktuellen Eigenschaften eines Elements abzurufen. Verwenden Sie die HDM _ GETITEMCOUNT-Nachricht, um die Anzahl der Elemente in einem Headersteuerelement abzurufen.
Owner-Drawn Headersteuerelemente
Sie können einzelne Elemente eines Headersteuerelements als besitzergezeichnete Elemente definieren. Mit dieser Technik haben Sie mehr Kontrolle über die Darstellung eines Headerelements als sonst.
Sie können die HDM _ INSERTITEM-Nachricht verwenden, um ein neues vom Besitzer gezeichnetes Element in ein Headersteuerelement einzufügen, oder die HDM _ SETITEM-Nachricht, um ein vorhandenes Element in ein vom Besitzer gezeichnetes Element zu ändern. Beide Nachrichten enthalten die Adresse einer HDITEM-Struktur, für die der fmt-Member auf den HDF _ OWNERDRAW-Wert festgelegt sein sollte.
Wenn ein Headersteuerelement ein vom Besitzer gezeichnetes Element zeichnen muss, sendet es die WM _ DRAWITEM-Nachricht an das übergeordnete Fenster. Der wParam-Parameter der Nachricht ist der untergeordnete Fensterbezeichner des Headersteuerelements, und der lParam-Parameter ist eine Adresse einer DRAWITEMSTRUCT-Struktur. Das übergeordnete Fenster verwendet die Informationen in der -Struktur, um das Element zu zeichnen. Für ein vom Besitzer gezeichnetes Element in einem Headersteuerelement enthält die DRAWITEMSTRUCT-Struktur die folgenden Informationen.
| Member | Beschreibung |
|---|---|
| CtlType | ODT _ Header:Besitzer-gezeichneter Steuerelementtyp. |
| CtlID | Bezeichner des untergeordneten Fensters des Headersteuerelements. |
| Itemid | Index des zu zeichnenden Elements. |
| itemAction | TEROPERABILITÄT _ DRAWENTIRE-Zeichenaktionsflag. |
| itemState | ODS _ AUSGEWÄHLTEs Zeichenaktionsflag, wenn sich der Cursor auf dem Element befindet und die Maustaste gedrückt ist. Andernfalls ist dieser Member 0 (null). |
| hwndItem | Handle für das Headersteuerelement. |
| Hdc | Handle für den Gerätekontext des Headersteuerelements. |
| rcItem | Koordinaten des zu zeichnenden Headerelements. Die Koordinaten sind relativ zur oberen linken Ecke des Headersteuerelements. |
| Itemdata | Anwendungsdefinierter 32-Bit-Wert, der dem Element zugeordnet ist. |
Headersteuerelementfilter
Durch Angeben des HDS _ FILTERBAR-Fensterstils für ein Headersteuerelement können Sie die Platzierung von Filterbearbeitungsfeldern unterhalb der Spaltenüberschriften aktivieren. Neben dem Bearbeitungsfeld wird eine Filterschaltfläche angezeigt. Sie können die Filterung implementieren, indem Sie auf DIE Benachrichtigungscodes HDN _ BEGINFILTEREDIT, HDN _ ENDFILTEREDIT, HDN _ FILTERBTNCLICKoder HDN _ FILTERCHANGE reagieren.
Standardmäßig enthält das Bearbeitungsfeld eine Eingabeaufforderung für den Benutzer. Sie können das Bearbeitungsfeld mithilfe von Header _ ClearFilter oder Header _ ClearAllFiltersin diesen Standardzustand wiederherstellen.
Das folgende Codebeispiel zeigt, wie Sie das Headersteuerelement aus einem Listenansicht-Steuerelement abrufen und eine Filterleiste hinzufügen.
// hList is the HWND of the list-view control.
HWND hHeader = ListView_GetHeader(hList);
LONG_PTR styles = GetWindowLongPtr(hHeader, GWL_STYLE);
SetWindowLongPtr(g_hHeader, GWL_STYLE, styles | HDS_FILTERBAR);
Standardverarbeitung von Headersteuerelementnachrichten
In diesem Abschnitt werden die Fenstermeldungen beschrieben, die von der Fensterprozedur für die WC _ HEADER-Fensterklasse verarbeitet werden.
Message |
Ausgeführte Verarbeitung |
|---|---|
| WM _ CREATE | Initialisiert das Headersteuerelement. |
| WM _ DESTROY | Entinitialisiert das Headersteuerelement. |
| WM _ ERASEBKGND | Füllt den Hintergrund des Headersteuerelements mithilfe der aktuellen Hintergrundfarbe des Steuerelements aus. |
| WM _ GETDLGCODE | Gibt eine Kombination der WERTE DLGC _ WANTTAB und DLGC _ WANTGCWS zurück. |
| WM _ GETFONT | Gibt das Handle an die aktuelle Schriftart zurück, die vom Headersteuerelement zum Zeichnen des Texts verwendet wird. |
| WM _ LBUTTONDBLCLK | Erfasst Mauseingaben. Wenn sich der Mauszeiger auf einem Trennzeichen befindet, sendet das Steuerelement den HDN BEGINTRACK-Benachrichtigungscode _ und beginnt mit dem Ziehen des Trennzeichens. Wenn sich der Cursor auf einem Element befindet, wird das Element im gedrückten Zustand angezeigt. |
| WM _ LBUTTONDOWN | Identisch mit der _ WM-LBUTTONDBLCLK-Nachricht. |
| WM _ LBUTTONUP | Gibt die Mausaufnahme frei. Wenn das Steuerelement die Mausbewegung verfolgt hat, sendet es den _ HDN-ENDTRACK-Benachrichtigungscode und umrext das Headersteuerelement. Andernfalls sendet das Steuerelement den HDN ITEMCLICK-Benachrichtigungscode _ und schreibt das Headerelement neu, auf das geklickt wurde. |
| WM _ MOUSEMOVE | Wenn ein Trennzeichen gezogen wird, sendet das Steuerelement den HDN _ TRACK-Benachrichtigungscode und zeigt das Element an der neuen Position an. Wenn die linke Maustaste gedrückt ist und sich der Cursor auf einem Element befindet, wird das Element im gedrückten Zustand angezeigt. |
| WM _ NCCREATE | Ordnet eine interne Datenstruktur zu und initialisiert sie. |
| WM _ NCDESTROY | Gibt die vom Headersteuerelement zugeordneten Ressourcen frei, nachdem das Headersteuerelement nicht initialisiert wurde. |
| WM _ PAINT | Zeichnet den ungültigen Bereich des Headersteuerelements. 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 _ SETCURSOR | Legt die Cursorform fest, je nachdem, ob sich der Cursor auf einem Trennelement oder in einem Headerelement befindet. |
| WM _ SETFONT | Wählt ein neues Schriftarthandle im Gerätekontext für das Headersteuerelement aus. |