Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kontrolka nagłówka to okno, które zwykle znajduje się powyżej kolumn tekstowych lub liczbowych. Zawiera tytuł dla każdej kolumny i można go podzielić na części. Użytkownik może przeciągnąć separatory oddzielające części, aby ustawić szerokość każdej kolumny. Poniższa ilustracja przedstawia kontrolkę nagłówka zawierającą kolumny z etykietami, które zawierają szczegółowe informacje o plikach w katalogu.
Kontrolkę nagłówka można utworzyć przy użyciu funkcji CreateWindowEx, określając klasę okna WC_HEADER i odpowiednie style kontrolki nagłówka . Ta klasa okna jest rejestrowana, gdy biblioteka DLL wspólnych kontrolek zostanie załadowana. Aby upewnić się, że ta biblioteka DLL jest załadowana, użyj funkcji InitCommonControlsEx. Po utworzeniu kontrolki nagłówka można podzielić ją na części, ustawić tekst w każdej części i kontrolować wygląd okna przy użyciu komunikatów okna nagłówka.
Kontrolkę nagłówka można utworzyć jako okno podrzędne innej kontrolki, na przykład pole listy. Jednak kontrolka nadrzędna nie jest świadoma kontrolki nagłówka i nie uwzględnia miejsca zajętego przez nagłówek, co skutkuje tym, że elementy listy będą wyświetlane za nagłówkiem. Jeśli chcesz użyć kontrolki nagłówka w polu listy lub innej kontrolce, kontrolka nadrzędna musi być rysowana przez właściciela, aby wszystkie elementy zostały wyświetlone we właściwej pozycji.
Kontrolki widoku listy mają już kontrolki nagłówka. Zamiast tworzyć kontrolkę nagłówka dla kontrolki widoku listy, należy użyć LVM_GETHEADER lub ListView_GetHeader, aby pobrać istniejącą kontrolkę.
- rozmiar i położenie kontrolki nagłówka
- elementów
- Owner-Drawn Kontrolki nagłówka
- filtry kontrolek nagłówka
- domyślne przetwarzanie komunikatów kontrolki nagłówka
Rozmiar i położenie kontrolki nagłówka
Zazwyczaj należy ustawić rozmiar i położenie kontrolki nagłówka, aby mieścić się w granicach określonego prostokąta, takiego jak obszar klienta okna. Za pomocą komunikatu HDM_LAYOUT można pobrać odpowiednie wartości rozmiaru i położenia z kontrolki nagłówka.
Podczas wysyłania HDM_LAYOUTnależy określić adres struktury HDLAYOUT, która zawiera współrzędne prostokąta przeznaczonego dla kontrolki nagłówka i dostarcza wskaźnik do struktury WINDOWPOS. Kontrolka wypełnia strukturę WINDOWPOS z wartościami rozmiaru i położenia odpowiednimi do pozycjonowania kontrolki u góry określonego prostokąta. Wartość wysokości jest sumą wysokości obramowań poziomych kontrolki oraz średniej wysokości znaków w czcionce aktualnie wybranej w kontekście urządzenia kontrolki.
Jeśli chcesz użyć HDM_LAYOUT, aby ustawić początkowy rozmiar i położenie kontrolki nagłówka, ustaw początkowy stan widoczności kontrolki, aby był ukryty. Po wysłaniu HDM_LAYOUT w celu pobrania wartości rozmiaru i pozycji można użyć funkcji SetWindowPos, aby ustawić nowy rozmiar, położenie i stan widoczności.
Elementy
Kontrolka nagłówka zwykle zawiera kilka elementów nagłówka, które definiują kolumny kontrolki. Element można dodać do kontrolki nagłówka, wysyłając komunikat HDM_INSERTITEM do kontrolki. Komunikat zawiera adres struktury HDITEM. Ta struktura definiuje właściwości elementu nagłówka, które może zawierać ciąg znaków, obraz bitmapowy, rozmiar początkowy i wartość LPARAM zdefiniowaną przez aplikację.
Element fmt elementu hdITEM struktury może zawierać flagę HDF_STRING lub HDF_BITMAP, aby wskazać, czy kontrolka wyświetla ciąg lub mapę bitową elementu. Jeśli chcesz wyświetlić zarówno ciąg, jak i mapę bitową, utwórz element rysowany przez właściciela, ustawiając element fmt do uwzględnienia flagi HDF_OWNERDRAW. Struktura HDITEM określa również flagi formatowania, które informują kontrolkę, czy powinna wyśrodkować, wyrównać do lewej lub do prawej ciąg lub mapę bitową w prostokącie elementu.
HDM_INSERTITEM zwraca indeks nowo dodanego elementu. Możesz użyć indeksu w innych komunikatach, aby ustawić właściwości lub pobrać informacje o elemencie. Element można usunąć przy użyciu komunikatu HDM_DELETEITEM, określając indeks elementu do usunięcia.
Możesz użyć komunikatu HDM_SETITEM, aby ustawić właściwości istniejącego elementu nagłówka i komunikat HDM_GETITEM w celu pobrania bieżących właściwości elementu. Aby pobrać liczbę elementów w kontrolce nagłówka, użyj komunikatu HDM_GETITEMCOUNT.
Kontrolki nagłówka Owner-Drawn
Poszczególne elementy kontrolki nagłówka można zdefiniować jako elementy rysowane przez właściciela. Użycie tej techniki daje ci większą kontrolę nad wyglądem elementu nagłówka, niż miałbyś bez niej.
Możesz użyć komunikatu HDM_INSERTITEM, aby wstawić nowy element wciągnięty przez właściciela do kontrolki nagłówka lub komunikat HDM_SETITEM, aby zmienić istniejący element na element rysowany przez właściciela. Oba komunikaty obejmują adres strukturyHDITEM, która powinna mieć element członkowski fmt ustawiony na wartość HDF_OWNERDRAW.
Gdy kontrolka nagłówka musi rysować element rysowany przez użytkownika, wysyła komunikat WM_DRAWITEM do okna nadrzędnego. Parametr wParam komunikatu jest identyfikatorem okna podrzędnego kontrolki nagłówka, a parametr lParam jest adresem struktury DRAWITEMSTRUCT. Okno nadrzędne używa informacji w strukturze do rysowania elementu. W przypadku elementu rysowanego przez właściciela w kontrolce nagłówka struktura DRAWITEMSTRUCT zawiera następujące informacje.
| Członek | Opis |
|---|---|
| CtlType | ODT_HEADER typ kontrolki rysowany przez właściciela. |
| CtlID | Identyfikator okna podrzędnego kontrolki nagłówka. |
| itemID | Indeks elementu do narysowania. |
| itemAction | ODA_DRAWENTIRE flaga akcji rysunku. |
| stanElementu | ODS_SELECTED flagę akcji rysunku, jeśli kursor znajduje się na elemencie, a przycisk myszy jest wciśnięty. W przeciwnym razie ten członek wynosi zero. |
| hwndItem | Uchwyt do kontrolki nagłówka. |
| hDC | Uchwyt do kontekstu urządzenia kontrolki nagłówka. |
| rcItem | Współrzędne elementu nagłówka, który ma być narysowany. Współrzędne są podawane w odniesieniu do lewego górnego rogu kontrolki nagłówka. |
| itemData | Zdefiniowana przez aplikację wartość 32-bitowa skojarzona z elementem. |
Filtry kontroli nagłówka
Określając styl okna HDS_FILTERBAR dla kontrolki nagłówka, można włączyć umieszczanie pól edycji filtru pod nagłówkami kolumn. Obok pola edycji zostanie wyświetlony przycisk filtru. Filtrowanie można zaimplementować, odpowiadając na kody powiadomień HDN_BEGINFILTEREDIT, HDN_ENDFILTEREDIT, HDN_FILTERBTNCLICKlub HDN_FILTERCHANGE.
Domyślnie pole edycji zawiera monit o wprowadzenie tekstu przez użytkownika. Pole edycji można przywrócić do tego stanu domyślnego przy użyciu Header_ClearFilter lub Header_ClearAllFilters.
Poniższy przykład kodu pokazuje, jak pobrać kontrolkę nagłówka z kontrolki widoku listy i dodać pasek filtru.
// 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);
Procesowanie domyślnych komunikatów kontrolki nagłówka
W tej sekcji opisano komunikaty okien, które są obsługiwane przez procedurę okna dla klasy okna WC_HEADER.
| Komunikat | Przetwarzanie wykonane |
|---|---|
| WM_CREATE | Inicjuje kontrolkę nagłówka. |
| WM_DESTROY | Deinitializuje kontrolkę nagłówka. |
| WM_ERASEBKGND | Wypełnia tło kontrolki nagłówka przy użyciu bieżącego koloru tła kontrolki. |
| WM_GETDLGCODE | Zwraca kombinację wartości DLGC_WANTTAB i DLGC_WANTARROWS. |
| WM_GETFONT | Zwraca uchwyt do ustawionej czcionki, której używa kontrolka nagłówkowa do rysowania jego tekstu. |
| WM_LBUTTONDBLCLK | Przechwytuje dane wejściowe myszy. Jeśli kursor myszy znajduje się na separatorze, kontrolka wysyła kod powiadomienia HDN_BEGINTRACK i rozpoczyna przeciąganie separatora. Jeśli kursor znajduje się na elemencie, element jest wyświetlany w stanie naciśniętym. |
| WM_LBUTTONDOWN | Tak samo jak komunikat WM_LBUTTONDBLCLK. |
| WM_LBUTTONUP | Zwalnia przechwytywanie myszy. Jeśli kontrolka śledziła ruch myszy, wysyła HDN_ENDTRACK kod powiadomienia i ponownie rysuje kontrolkę nagłówka. W przeciwnym razie kontrolka wysyła kod powiadomienia HDN_ITEMCLICK i ponownie rysuje element nagłówka, który został kliknięty. |
| WM_MOUSEMOVE | Jeśli element dzielący jest przeciągany, kontrolka wysyła kod powiadomienia HDN_TRACK i wyświetla element w nowej pozycji. Jeśli lewy przycisk myszy jest w dół, a kursor znajduje się na elemencie, element jest wyświetlany w stanie naciśniętym. |
| WM_NCCREATE | Przydziela i inicjuje wewnętrzną strukturę danych. |
| WM_NCDESTROY | Zwalnia zasoby przydzielone przez kontrolkę nagłówka po jej zainicjowaniu. |
| WM_PAINT | Maluje nieprawidłowy region kontrolki nagłówka. Jeśli parametr wParam nie jest NULL, kontrola przyjmuje, że wartość to HDC i rysuje, używając tego kontekstu urządzenia. |
| WM_SETCURSOR | Ustawia kształt kursora w zależności od tego, czy kursor znajduje się na dzielniku, czy w elemencie nagłówka. |
| WM_SETFONT | Wybiera nowy uchwyt czcionki w kontekście urządzenia dla kontrolki nagłówka. |