Dela via


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

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.

Följande är de Windows-meddelanden som en ComboBoxEx-kontroll vidarebefordrar till det överordnade fönstret: