Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A fejlécvezérlő egy ablak, amely általában szöveg- vagy számoszlopok felett helyezkedik el. Minden oszlophoz tartalmaz egy címet, és részekre osztható. A felhasználó az egyes oszlopok szélességének beállításához húzhatja a részeket elválasztó elválasztó elemeket. Az alábbi ábrán egy fejlécvezérlő látható, amely címkézett oszlopokkal rendelkezik, amelyek részletes információkat nyújtanak a címtárban lévő fájlokról.
Fejlécvezérlőt a CreateWindowEx függvénnyel hozhat létre, megadva a WC_HEADER ablakosztályt és a megfelelő fejlécvezérlő stílusokat. Ez az ablakosztály a közös vezérlő DLL betöltésekor van regisztrálva. A DLL betöltésének ellenőrzéséhez használja az InitCommonControlsEx függvényt. Miután létrehozott egy fejlécvezérlőt, részekre oszthatja, az egyes részekben beállíthatja a szöveget, és élőfejablak-üzenetekkel szabályozhatja az ablak megjelenését.
Az fejlécvezérlő létrehozható egy másik vezérlőelem, például egy listamező, gyermekablakaként. A szülő vezérlőelem azonban nincs tisztában a fejléc vezérlőelemmel, és nem veszi figyelembe a fejléc által foglalt területet, aminek következtében a listaelemek megjelennek a fejléc mögött. Ha fejléc vezérlőelemet szeretne használni egy listamezőben vagy más vezérlőelemben, a szülő vezérlőelemnek tulajdonosi rajzolásúnak kell lennie, hogy az összes elem a megfelelő helyen jelenjen meg.
A listanézet vezérlői már rendelkeznek fejlécvezérlőkkel. A listanézet-vezérlők fejlécvezérlőjének létrehozása helyett LVM_GETHEADER vagy ListView_GetHeader használatával kéri le a meglévő vezérlőt.
- fejlécvezérlő mérete és pozíciója
- elemek
- Owner-Drawn Fejlécvezérlők
- Fejlécvezérlő szűrők
- Alapértelmezett fejlécvezérlő üzenetfeldolgozás
Fejlécvezérlő mérete és pozíciója
A fejlécvezérlő méretét és pozícióját általában úgy kell beállítania, hogy elférjen egy adott téglalap határain belül, például egy ablak ügyfélterületén. A HDM_LAYOUT üzenet használatával lekérheti a megfelelő méret- és pozícióértékeket a fejlécvezérlőből.
A HDM_LAYOUTküldésekor meg kell adnia egy HDLAYOUT szerkezet címét, amely tartalmazza a fejlécvezérlő által elfoglalt téglalap koordinátáit, és egy WINDOWPOS struktúrára mutató mutatót biztosít. A vezérlő kitölti a WINDOWPOS szerkezetet a vezérlőelemnek a megadott téglalap tetején való elhelyezéséhez megfelelő méret- és pozícióértékekkel. A magasságérték a vezérlőelem vízszintes szegélyeinek magasságát és a karakterek átlagos magasságát adja meg a vezérlőelem eszközkörnyezetében jelenleg kijelölt betűtípusban.
Ha a HDM_LAYOUT szeretné beállítani egy fejlécvezérlő kezdeti méretét és pozícióját, állítsa be a vezérlő kezdeti láthatósági állapotát úgy, hogy az rejtett legyen. Miután elküldte a HDM_LAYOUT a méret- és pozícióértékek lekéréséhez, a SetWindowPos függvénnyel állíthatja be az új méretet, pozíciót és láthatósági állapotot.
Elemek
A fejlécvezérlők általában több olyan fejlécelemet tartalmaznak, amelyek meghatározzák a vezérlőelem oszlopait. Egy elemet ad hozzá egy fejlécvezérlőhöz, ha a HDM_INSERTITEM üzenetet küldi el a vezérlőnek. Az üzenet egy HDITEM--struktúra címét tartalmazza. Ez a struktúra határozza meg a fejlécelem tulajdonságait, amelyek tartalmazhatnak sztringet, bitleképet, kezdeti méretet és alkalmazás által definiált LPARAM értéket.
Az elem HDITEM szerkezetének fmt tagja a HDF_STRING vagy HDF_BITMAP jelzővel jelezheti, hogy a vezérlő megjeleníti-e az elem sztringjét vagy bitképét. Ha sztringet és bitképet is meg szeretne jeleníteni, hozzon létre egy tulajdonos által rajzolt elemet úgy, hogy a fmt tagot úgy állítja be, hogy az tartalmazza a HDF_OWNERDRAW jelzőt. A HDITEM struktúra formázási jelzőket is meghatároz, amelyek jelzik a vezérlőelemnek, hogy középre, balra vagy jobbra igazítsa-e a sztringet vagy a bitképet az elem téglalapjában.
HDM_INSERTITEM az újonnan hozzáadott elem indexét adja vissza. Az indexet más üzenetekben is használhatja tulajdonságok beállításához vagy az elem adatainak lekéréséhez. Egy elemet a HDM_DELETEITEM üzenet használatával törölhet, megadva a törölni kívánt elem indexét.
A HDM_SETITEM üzenettel beállíthatja egy meglévő fejlécelem tulajdonságait, a HDM_GETITEM üzenet pedig lekérheti egy elem aktuális tulajdonságait. A fejlécvezérlő elemeinek számának lekéréséhez használja a HDM_GETITEMCOUNT üzenetet.
Owner-Drawn fejlécvezérlők
A fejléc vezérlőelem egyes elemeit megadhatja tulajdonos által rajzolt elemeknek. Ezzel a technikával jobban szabályozhatja a fejlécelemek megjelenését, mint egyébként.
A HDM_INSERTITEM üzenettel új, tulajdonos által rajzolt elemet szúrhat be egy fejlécvezérlőbe, vagy a HDM_SETITEM üzenettel egy meglévő elemet tulajdonos által rajzolt elemgé alakíthat. Mindkét üzenet egy HDITEM--struktúra címét tartalmazza, amelynek fmt mezőjét a HDF_OWNERDRAW értékre kell állítsa.
Ha egy fejléc vezérlőelemnek meg kell rajzolnia egy tulajdonos által rajzolt elemet, a WM_DRAWITEM üzenetet küldi a szülőablakba. Az üzenet wParam paramétere a fejlécvezérlő gyermekablak-azonosítója, az lParam paraméter pedig egy DRAWITEMSTRUCT struktúra címe. A szülőablak a struktúra információi alapján rajzolja meg az elemet. A fejléc vezérlőelemben lévő tulajdonos által rajzolt elem esetében a DRAWITEMSTRUCT struktúra a következő információkat tartalmazza.
| Tag | Leírás |
|---|---|
| CtlType | ODT_HEADER tulajdonos által rajzolt vezérlőtípus. |
| CtlID | A fejlécvezérlő gyermekablak-azonosítója. |
| tételazonosító | A megrajzolandó elem indexe. |
| itemAction | ODA_DRAWENTIRE rajzműveleti jelző. |
| tételállapot | ODS_SELECTED rajzolási művelet zászlaja, ha a kurzor az elemen van, és az egérgomb le van nyomva. Ellenkező esetben ez a tag nulla. |
| hwndItem | Fogópont a fejléc vezérlőelemhez. |
| hDC | Kezelje a fejlécvezérlő eszközkörnyezetét. |
| rcItem | A megrajzolandó fejlécelem koordinátái. A koordináták a fejléc vezérlőelem bal felső sarkához viszonyítva vannak. |
| itemData | Az elemhez társított alkalmazás által definiált 32 bites érték. |
Fejlécvezérlő szűrők
A fejlécvezérlő HDS_FILTERBAR ablakstílusának megadásával engedélyezheti a szűrő szerkesztési mezőinek elhelyezését az oszlopfejlécek alatt. Megjelenik egy szűrőgomb a szerkesztési mező mellett. A szűrést HDN_BEGINFILTEREDIT, HDN_ENDFILTEREDIT, HDN_FILTERBTNCLICKvagy HDN_FILTERCHANGE értesítési kódokra válaszolva valósíthatja meg.
Alapértelmezés szerint a szerkesztési mező egy, a felhasználónak a szöveg megadására vonatkozó kérést tartalmaz. A szerkesztési mezőt az alapértelmezett állapotba állíthatja vissza Header_ClearFilter vagy Header_ClearAllFiltershasználatával.
Az alábbi kódpéldából megtudhatja, hogyan kérdezheti le a fejlécvezérlőt egy listanézet-vezérlőből, és hogyan adhat hozzá szűrősávot.
// 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);
Alapértelmezett fejlécvezérlő üzenetfeldolgozása
Ez a szakasz a WC_HEADER ablakosztály ablakműveletei által kezelt ablaküzeneteket ismerteti.
| Üzenet | Elvégzett feldolgozás |
|---|---|
| WM_CREATE | Inicializálja a fejlécvezérlőt. |
| WM_DESTROY | Nem inicializálja a fejlécvezérlőt. |
| WM_ERASEBKGND | Kitölti a fejlécvezérlő hátterét a vezérlő aktuális háttérszínével. |
| WM_GETDLGCODE | A DLGC_WANTTAB és DLGC_WANTARROWS értékek kombinációját adja vissza. |
| WM_GETFONT | A fogópontot az aktuális betűtípusra adja vissza, amelyet a fejlécvezérlő a szöveg rajzolásához használ. |
| WM_LBUTTONDBLCLK | Rögzíti az egér bemenetét. Ha az egérmutató egy elválasztón van, a vezérlő elküldi a HDN_BEGINTRACK értesítési kódot, és elkezdi húzni az elválasztót. Ha a kurzor egy elemen van, az elem megnyomott állapotban jelenik meg. |
| WM_LBUTTONDOWN | Ugyanaz, mint a WM_LBUTTONDBLCLK üzenet. |
| WM_LBUTTONUP | Felszabadítja az egérrögzítést. Ha a vezérlő nyomon követte az egér mozgását, elküldi a HDN_ENDTRACK értesítési kódot, és újrarajzozza a fejlécvezérlőt. Ellenkező esetben a vezérlő elküldi a HDN_ITEMCLICK értesítési kódot, és újrarajzozza a kattintott fejlécelemet. |
| WM_MOUSEMOVE | Ha egy elválasztó húzása történik, a vezérlő elküldi a HDN_TRACK értesítési kódot, és megjeleníti az elemet az új pozícióban. Ha a bal egérgomb le van kapcsolva, és a kurzor egy elemen van, az elem megnyomott állapotban jelenik meg. |
| WM_NCCREATE | Belső adatstruktúra lefoglalása és inicializálása. |
| WM_NCDESTROY | Felszabadítja a fejlécvezérlő által lefoglalt erőforrásokat, miután a fejlécvezérlő nem inicializálódott. |
| WM_PAINT | A fejlécvezérlő érvénytelen területét festi. Ha a wParam paraméter nem NULL, a vezérlő feltételezi, hogy az érték egy HDC, és azzal az eszközkörnyezettel rajzol. |
| WM_SETCURSOR | Beállítja a kurzor alakzatát, attól függően, hogy elválasztón vagy fejléceleven van-e a kurzor. |
| WM_SETFONT | Új betűtípus-leírót jelöl ki az eszközkörnyezetben a fejlécvezérlőhöz. |