Delen via


Over koptekstbedieningselementen

Een besturingselement voor kopteksten is een venster dat meestal boven kolommen met tekst of getallen wordt weergegeven. Deze bevat een titel voor elke kolom en kan worden onderverdeeld in delen. De gebruiker kan de scheidingstekens slepen die de onderdelen scheiden om de breedte van elke kolom in te stellen. In de volgende afbeelding ziet u een kopregelcontrole met aangeduide kolommen die gedetailleerde informatie geven over bestanden in een map.

schermafbeelding van een dialoogvenster met een driekoloms koptekstbesturingselement

U kunt een besturingselement voor kopteksten maken met behulp van de functie CreateWindowEx, waarbij u de WC_HEADER vensterklasse en de juiste Koptekstbesturingselementstijlenopgeeft. Deze vensterklasse wordt geregistreerd wanneer het algemene DLL-bestand voor besturingselementen wordt geladen. Gebruik de functie InitCommonControlsEx om ervoor te zorgen dat dit DLL-bestand is geladen. Nadat u een besturingselement voor kopteksten hebt gemaakt, kunt u het verdelen in delen, de tekst in elk onderdeel instellen en het uiterlijk van het venster beheren met behulp van berichtkoppen.

Een besturingselement voor kopteksten kan worden gecreëerd als een ondergeschikt venster van een ander element, zoals een lijstvak. Het ouderbesturingselement is echter niet op de hoogte van het header-besturingselement en houdt geen rekening met de ruimte die door de koptekst wordt ingenomen, waardoor lijstitems achter de koptekst worden weergegeven. Als u een headercontrole in een keuzelijst of ander besturingselement wilt gebruiken, moet het bovenliggende besturingselement door de eigenaar bepaald zijn, zodat alle items op de juiste positie worden weergegeven.

Besturingselementen voor lijstweergave hebben al koptekstbesturingselementen. In plaats van een koptekstbesturingselement voor een lijstweergavecontrole te maken, gebruikt u LVM_GETHEADER of ListView_GetHeader om het bestaande besturingselement op te halen.

Grootte en positie van koptekstbesturing

Normaal gesproken moet u de grootte en positie van een koptekstbesturingselement instellen om binnen de grenzen van een bepaalde rechthoek te passen, zoals het clientgebied van een venster. Met behulp van het HDM_LAYOUT bericht kunt u de juiste grootte en positiewaarden ophalen uit de koptekstcontrole.

Wanneer u HDM_LAYOUTverzendt, specificeert u het adres van een HDLAYOUT--structuur die de coördinaten van de rechthoek bevat, waarin het besturingselement voor de koptekst moet komen, en geeft u een aanwijzer op naar een WINDOWPOS--structuur. Het besturingselement vult de WINDOWPOS structuur met grootte- en positiewaarden die geschikt zijn voor het plaatsen van het besturingselement boven aan de opgegeven rechthoek. De hoogtewaarde is de som van de hoogten van de horizontale randen van het besturingselement en de gemiddelde lengte van tekens in het lettertype dat momenteel is geselecteerd in de apparaatcontext van het besturingselement.

Als u HDM_LAYOUT wilt gebruiken om de oorspronkelijke grootte en positie van een besturingselement voor kopteksten in te stellen, stelt u de initiële zichtbaarheidsstatus van het besturingselement in, zodat het verborgen is. Nadat u HDM_LAYOUT hebt verzonden om de grootte en positiewaarden op te halen, kunt u de functie SetWindowPos gebruiken om de nieuwe grootte, positie en zichtbaarheidsstatus in te stellen.

Artikelen

Een controle-element voor kopteksten bevat doorgaans verschillende koptekstelementen die de kolommen van het controle-element definiëren. U voegt een item toe aan een koptekstbesturingselement door het bericht HDM_INSERTITEM naar het besturingselement te verzenden. Het bericht bevat het adres van een HDITEM structuur. Deze structuur definieert de eigenschappen van het header-item, waaronder een tekenreeks, een bitmapafbeelding, een initiële grootte en een door de toepassing gedefinieerde LPARAM- waarde.

De fmt lid van de HDITEM-structuur van een item kan de vlag HDF_STRING of de vlag HDF_BITMAP bevatten, om aan te geven of de besturing de tekenreeks of bitmap van het item weergeeft. Als u zowel een tekenreeks als een bitmap wilt weergeven, maakt u een door de eigenaar getekend item door het fmt- lid in te stellen om de HDF_OWNERDRAW vlag op te nemen. De HDITEM- structuur specificeert ook opmaakvlaggen die aangeven of de tekenreeks of bitmap moet worden gecentreerd, links uitgelijnd of rechts uitgelijnd in de rechthoek van het item.

HDM_INSERTITEM retourneert de index van het zojuist toegevoegde item. U kunt de index in andere berichten gebruiken om eigenschappen in te stellen of informatie over het item op te halen. U kunt een item verwijderen met behulp van het HDM_DELETEITEM bericht, waarbij u de index van het item opgeeft dat u wilt verwijderen.

U kunt het HDM_SETITEM bericht gebruiken om de eigenschappen van een bestaand koptekstitem en het HDM_GETITEM bericht in te stellen om de huidige eigenschappen van een item op te halen. Gebruik het HDM_GETITEMCOUNT bericht om het aantal items in een headercontrole te verkrijgen.

Owner-Drawn kopregelbedieningselementen

U kunt afzonderlijke items van een koptekstbesturingselement definiëren om door de eigenaar getekende items te zijn. Als u deze techniek gebruikt, hebt u meer controle dan u anders zou hebben over het uiterlijk van een headeritem.

U kunt het HDM_INSERTITEM bericht gebruiken om een nieuw door de eigenaar getekend item in te voegen in een koptekstbesturingselement of het HDM_SETITEM bericht om een bestaand item te wijzigen in een door de eigenaar getekend item. Beide berichten bevatten het adres van een HDITEM--structuur, waarop het fmt- lid moet zijn ingesteld op de HDF_OWNERDRAW-waarde.

Wanneer een koptekstbesturingselement een door de eigenaar getekend item moet tekenen, wordt het WM_DRAWITEM bericht naar het bovenliggende venster verzonden. De parameter wParam van het bericht is de child window identifier van de headercontrol, en de parameter lParam is een adres van een DRAWITEMSTRUCT structuur. Het bovenliggende venster gebruikt de informatie in de structuur om het item weer te geven. Voor een door de eigenaar getekend item in een koptekstcontrole bevat de DRAWITEMSTRUCT-structuur de volgende informatie.

Lid Beschrijving
CtlType ODT_HEADER door eigenaar getekend controle type.
CtlID Onderliggende venster-id van het headerbesturingselement.
itemID Index van het te tekenen item.
itemAction ODA_DRAWENTIRE tekenactievlag.
itemState ODS_SELECTED tekenactievlag wanneer de cursor op het item staat en de muisknop ingedrukt is. Anders is dit lid nul.
hwndItem- Verwijzing naar de koptekstcontrole.
hDC Greep naar de apparaatcontext van het header-besturingselement.
rcItem Coördinaten van het koptekstitem dat getekend moet worden. De coördinaten zijn relatief ten opzichte van de linkerbovenhoek van het koptekstbesturingselement.
itemData Toepassingsgedefinieerde 32-bits waarde die aan het item is gekoppeld.

 

Filters voor koptekstbeheer

Door de HDS_FILTERBAR vensterstijl voor een koptekstbesturingselement op te geven, kunt u de plaatsing van filterbewerkingsvakken onder de kolomkoppen inschakelen. Er wordt een filterknop weergegeven naast het invoervak. U kunt filteren implementeren door te reageren op HDN_BEGINFILTEREDIT, HDN_ENDFILTEREDIT, HDN_FILTERBTNCLICKof HDN_FILTERCHANGE meldingscodes.

Standaard bevat het invoervak een prompt voor de gebruiker om tekst in te voeren. U kunt het invoervak herstellen naar deze standaardstatus met behulp van Header_ClearFilter of Header_ClearAllFilters.

In het volgende codevoorbeeld ziet u hoe u de kopregel ophaalt uit een lijstweergave en een filterbalk toevoegt.

// 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);

Verwerking van standaard headercontroleberichten

In deze sectie worden de vensterberichten beschreven die worden verwerkt door de vensterprocedure voor de WC_HEADER vensterklasse.

Bericht Verwerking uitgevoerd
WM_CREATE Initialiseert het besturingselement voor de koptekst.
WM_DESTROY Maakt de initialisatie van het besturingselement voor de header ongedaan.
WM_ERASEBKGND De achtergrond van het besturingselement voor de koptekst wordt gevuld met de huidige achtergrondkleur van het besturingselement.
WM_GETDLGCODE Retourneert een combinatie van de DLGC_WANTTAB en DLGC_WANTARROWS waarden.
WM_GETFONT Retourneert de greep naar het huidige lettertype, dat wordt gebruikt door het besturingselement koptekst om de tekst te tekenen.
WM_LBUTTONDBLCLK Legt de invoer van de muis vast. Als de muiscursor zich op een scheidingslijn bevindt, verzendt het besturingselement de HDN_BEGINTRACK meldingscode en begint het slepen van de scheidingslijn. Als de cursor zich op een item bevindt, wordt het item weergegeven met de status Ingedrukt.
WM_LBUTTONDOWN Hetzelfde als het WM_LBUTTONDBLCLK bericht.
WM_LBUTTONUP Beëindigt de vastlegging van de muis. Als het besturingselement de muisbeweging bijhoudt, wordt de HDN_ENDTRACK meldingscode verzonden en wordt het koptekstbesturingselement opnieuw getekend. Anders verzendt het besturingselement de HDN_ITEMCLICK meldingscode en tekent het headeritem waarop is geklikt opnieuw.
WM_MOUSEMOVE Als een scheidingslijn wordt gesleept, verzendt het besturingselement de HDN_TRACK meldingscode en wordt het item op de nieuwe positie weergegeven. Als de linkermuisknop omlaag is en de cursor zich op een item bevindt, wordt het item in de status Ingedrukt weergegeven.
WM_NCCREATE Wijst een interne gegevensstructuur toe en initialiseert deze.
WM_NCDESTROY Hiermee worden de resources vrijgemaakt die door het headerbesturingselement zijn toegewezen na de de-initialisatie van het headerbesturingselement.
WM_PAINT Schildert het ongeldige gebied van het koptekstbesturingselement. Als de parameter wParam niet NULL is, gaat het besturingselement ervan uit dat de waarde een HDC is en verft met behulp van die apparaatcontext.
WM_SETCURSOR Hiermee stelt u de cursorshape in, afhankelijk van of de cursor zich op een scheidingslijn of in een koptekstitem bevindt.
WM_SETFONT Hiermee selecteert u een nieuwe lettertypegreep in de apparaatcontext voor het koptekstbeheer.