Om ComboBoxEx-kontroller
ComboBoxEx-kontroller är kombinationsrutekontroller som ger inbyggt stöd för objektbilder. För att göra objektbilder lättillgängliga ger kontrollen stöd för bildlistor. Genom att använda den här kontrollen kan du tillhandahålla funktionerna i en kombinationsruta utan att behöva rita objektgrafik manuellt.
Det här avsnittet innehåller följande avsnitt.
- Skapa ComboBoxEx-kontroller
- ComboBoxEx-kontrollformat
- ComboBoxEx-kontrollobjekt
- Återuppringningsobjekt
- ComboBoxEx-kontrollbildlistor
- Om ComboBoxEx-kontrollmeddelanden
- Vidarebefordran av meddelanden i ComboBoxEx-kontrollen
Skapa ComboBoxEx-kontroller
I praktiken skapar en ComboBoxEx-kontroll en intern kombinationsruta och utför anpassade rituppgifter åt dig baserat på en angiven bildlista. Därför är CBS_OWNERDRAWFIXED formatmallen underförstådd och det är inte nödvändigt att använda den när du skapar kontrollen. Eftersom bildlistor används för att tillhandahålla objektgrafik kan inte CBS_OWNERDRAWVARIABLE formatmall användas.
En ComboBoxEx-kontroll måste initieras genom att anropa funktionen InitCommonControlsEx och ange ICC_USEREX_CLASSES i den tillhörande INITCOMMONCONTROLSEX- struktur.
Du kan skapa en ComboBoxEx-kontroll med hjälp av funktionen CreateWindowEx och ange WC_COMBOBOXEX som fönsterklass. Klassen registreras när funktionen InitCommonControlsEx anropas enligt beskrivningen ovan.
ComboBoxEx-kontroller skapas utan en standardbildlista. Om du vill använda objektbilder måste du skapa en bildlista för ComboBoxEx-kontrollen och tilldela den till kontrollen med hjälp av CBEM_SETIMAGELIST-meddelandet. Om du inte tilldelar en bildlista till ComboBoxEx-kontrollen visar kontrollen endast objekttext.
ComboBoxEx-kontrollstilar
ComboBoxEx-kontroller stöder endast följande ComboBox-format:
- CBS_SIMPLE
- CBS_DROPDOWN
- CBS_DROPDOWNLIST
- WS_CHILD
Det finns också flera ComboBoxEx Control Extended Styles som endast används av ComboBoxEx.
Not
Det CBS_SIMPLE formatet kanske inte fungerar korrekt i vissa fall.
Eftersom ComboBoxEx-kontrollen utför ägarritningsuppgifter åt dig baserat på en tilldelad bildlista, är CBS_OWNERDRAWFIXED stilen underförstådd. Du behöver inte använda den när du skapar kontrollen. Eftersom bildlistor används för att tillhandahålla objektgrafik kan inte CBS_OWNERDRAWVARIABLE formatmall användas. ComboBoxEx-kontrollen stöder även ComboBoxEx Control Extended Styles som ger ytterligare funktioner.
ComboBoxEx-kontrollobjekt
ComboBoxEx-kontroller underhåller objektinformation med hjälp av en COMBOBOXEXITEM- struktur. Den här strukturen innehåller medlemmar för objektindex, bildindex (normal, markeringstillstånd och överlägg), indragsvärden, textsträngar och objektspecifika värden.
ComboBoxEx-kontrollen ger enkel åtkomst till och manipulering av objekt via meddelanden. Om du vill lägga till eller ta bort ett objekt skickar du meddelandet CBEM_INSERTITEM eller CBEM_DELETEITEM. Du kan ändra objekt som för närvarande finns i kontrollen med hjälp av meddelandet CBEM_SETITEM.
Återanropsobjekt
ComboBoxEx-kontroller stöder återanropsobjektattribut. Du kan ange ett objekt som ett återkallningsobjekt när du med hjälp av CBEM_INSERTITEMlägger till det i kontrollen. När du tilldelar värden till ett objekts COMBOBOXEXITEM- struktur måste du ange lämpliga återanropsflaggor. Följande är COMBOBOXEXITEM strukturmedlemmar och deras motsvarande återanropsflaggor.
Medlem | Återanropsvärde |
---|---|
pszText | LPSTR_TEXTCALLBACK |
iImage | I_IMAGECALLBACK |
iSelectedImage | I_IMAGECALLBACK |
iOverlay | I_IMAGECALLBACK |
iIndent | I_INDENTCALLBACK |
Kontrollen begär information om motringningsobjekt genom att skicka CBEN_GETDISPINFO meddelandekoder. Det här meddelandet skickas i form av ett WM_NOTIFY meddelande. När programmet bearbetar det här meddelandet måste det ange den begärda informationen för kontrollen. Om du ställer in mask medlem i den medföljande COMBOBOXEXITEM- struktur till CBEIF_DI_SETITEM, kommer kontrollen att lagra elementdata och kommer inte att begära dem igen.
ComboBoxEx-kontrollbildlistor
Om du vill att en ComboBoxEx-kontroll ska visa ikoner med objekt måste du ange en bildlista. ComboBoxEx-kontroller stöder upp till tre bilder för ett objekt – en för dess valda tillstånd, en för dess icke-markerade tillstånd och en för en överläggsbild. Tilldela en befintlig bildlista till en ComboBoxEx-kontroll med meddelandet CBEM_SETIMAGELIST.
COMBOBOXEXITEM-strukturen innehåller medlemmar som representerar bildindex för varje bildlista (markerad, omarkerad och överlägg). För varje objekt ställer du in dessa medlemmar så att de visar önskade bilder. Det är inte nödvändigt att ange bildindex för varje typ av bild. Du kan blanda och matcha bildtyper som du vill, men ange alltid masken medlem i COMBOBOXEXITEM struktur för att ange vilka medlemmar som används. Kontrollen ignorerar medlemmar som inte har flaggats som giltiga.
Notera
Om du använder formatmallen CBS_SIMPLE visas inte ikoner.
Om ComboBoxEx-kontrollmeddelanden
En ComboBoxEx-kontroll skickar meddelanden för att rapportera ändringar eller för att begära information om återanropsobjekt. Kontrollens förälder tar emot alla WM_COMMAND-meddelanden från kombinationsrutan i ComboBoxEx-kontrollen. ComboBoxEx-kontrollen skickar egna meddelanden med WM_NOTIFY meddelanden. Därför måste kontrollens ägare vara beredd att bearbeta båda formerna av meddelanden.
Följande är ComboBoxEx-specifika meddelandekoder som skickas via WM_NOTIFY meddelanden.
Anmälan | Beskrivning |
---|---|
CBEN_BEGINEDIT | Signalerar att användaren har aktiverat listrutan eller klickat i kontrollens redigeringsruta. |
CBEN_ENDEDIT | Signalerar att användaren har valt ett objekt från listrutan eller har slutfört en redigeringsåtgärd i redigeringsrutan. |
CBEN_DELETEITEM | Rapporterar att ett objekt har tagits bort. |
CBEN_GETDISPINFO | Begär information om ett objekts attribut. |
CBEN_INSERTITEM | Signalerar att ett objekt infogades i kontrollen. |
Vidarebefordran av ComboBoxEx-kontrollmeddelande
Följande är standardmeddelanden för kombinationsrutan som en ComboBoxEx-kontroll vidarebefordrar till den interna kombinationsrutan. Vissa av dessa meddelanden kan bearbetas av ComboBoxEx-kontrollen antingen före eller efter att meddelandet har vidarebefordrats.
- CB_DELETESTRING
- CB_FINDSTRINGEXACT
- CB_GETCOUNT
- CB_GETCURSEL
- CB_GETDROPPEDCONTROLRECT
- CB_GETDROPPEDSTATE
- CB_GETITEMDATA
- CB_GETITEMHEIGHT
- CB_GETLBTEXT
- CB_GETLBTEXTLEN
- CB_GETEXTENDEDUI
- CB_LIMITTEXT
- CB_RESETCONTENT
- CB_SETCURSEL
- CB_SETDROPPEDWIDTH
- CB_SETEXTENDEDUI
- CB_SETITEMDATA
- CB_SETITEMHEIGHT
- CB_SHOWDROPDOWN
Följande är de Windows-meddelanden som en ComboBoxEx-kontroll vidarebefordrar till det överordnade fönstret:
- WM_COMMAND (Detta inkluderar alla CBN_ meddelanden.)
- WM_NOTIFY