Dela via


Kombinationsrutefunktioner

I det här dokumentet beskrivs funktionerna i kombinationsrutan. Mer information finns i följande avsnitt:

Specialfunktioner

Det finns särskilda meddelanden och funktioner som gör det möjligt för ett program att visa en kataloglista i en kombinationsruta, associera data med listobjekt i en kombinationsruta och ändra tangentbordsgränssnittet för en listruta eller listruta.

Kataloglistor

Ett program kan lägga till namnen på filer eller underkataloger i en kombinationsruta genom att skicka meddelandet CB_DIR till den. Parametern wParam för det här meddelandet anger attributen för de filer som ska läggas till och parametern lParam är en pekare till textsträngen som definierar filspecifikationen.

Du kan använda funktionen DlgDirListComboBox för att ersätta innehållet i en kombinationsruta i en dialogruta. Funktionen fyller kombinationsrutan med namnen på enheter, kataloger och filer som matchar en angiven uppsättning villkor. Funktionen DlgDirSelectComboBoxEx hämtar den aktuella markeringen i en kombinationsruta som initierats av DlgDirListComboBox. Dessa funktioner gör det möjligt för användaren att välja en enhet, katalog eller fil från en kombinationsruta utan att skriva filens plats och namn.

Funktionerna DlgDirListComboBox och DlgDirSelectComboBoxEx och CB_DIR-meddelandet liknar DlgDirList och DlgDirSelectEx funktioner och det LB_DIR meddelande som används med listrutor.

Data som är associerade med listobjekt

Ett program kan associera data med listobjekten i en kombinationsruta. Meddelandet CB_SETITEMDATA associerar ett DWORD- värde med ett listobjekt och CB_GETITEMDATA hämtar värdet som är associerat med ett listobjekt.

Exemplet i Skapa en ritad kombinationsruta för ägare använder objektdata för att associera en konstant med varje objekt i en listruta. Ett sådant unikt värde identifierar varje objekt oberoende av dess sorterade position.

Andra program kan använda objektdata för att associera en referens eller pekare med ett listobjekt. I så fall kan ett program bearbeta ett WM_DELETEITEM meddelande för att ta bort eller frigöra det angivna objektet när listobjektet tas bort.

Utökat användargränssnitt

Listrutekombinationsrutor och listrutor stöder ett alternativt tangentbordsgränssnitt som kallas utökade användargränssnittet. Som standard öppnar eller stänger F4-tangenten listan och NEDÅTPILen ändrar den aktuella markeringen. I en kombinationsruta med det utökade användargränssnittet inaktiveras dock F4-tangenten och om du trycker på NEDÅTPIL öppnas listrutan. Dessutom har mushjulet, som normalt bläddrar igenom objekten i listan, ingen funktion när det utökade användargränssnittet har angetts.

Om du vill välja användargränssnittet för en kombinationsruta kan ett program skicka meddelandet CB_SETEXTENDEDUI till kombinationsrutan. Ett TRUE- värde för parametern wParam aktiverar det utökade användargränssnittet. värdet FALSE anger standardanvändargränssnittet. För att avgöra om en kombinationsruta använder det utökade användargränssnittet kan ett program skicka meddelandet CB_GETEXTENDEDUI till kombinationsrutan.

Cue-banderoller

Cue-banderoller är en ny funktion i redigeringskontroller och kombinationsrutor. Syftet med en referensbanderoll är att ge användaren ett tips om syftet med en redigeringskontroll eller kombinationsruta. Följande skärmbild visar en redigeringskontroll med referenstexten "Sök".

skärmbild av en redigeringskontroll med referenstexten

Texten i en referensbanderoll visas när en redigeringskontroll inte har någon text eller om en kombinationsruta inte har någon markering. När användaren anger text i redigeringskontrollen eller gör en markering i en kombinationsruta försvinner signalbanderollen. Som standard försvinner även referensbanderollen när redigeringskontrollen eller kombinationsrutan får fokus.

Combo Box-meddelanden

Meddelanden från kombinationsrutor skickas som meddelandekoder i form av WM_COMMAND meddelanden. Meddelandekoden lagras i det höga ordet i parametern wParam och ett program kan bearbeta följande kombinationsruteaviseringskoder.

Meddelandekod Beskrivning
CBN_CLOSEUP Anger att listan i en nedrullningsbara kombinationsruta eller listruta håller på att stängas.
CBN_DBLCLK Anger att användaren har dubbelklickat på ett listobjekt i en enkel kombinationsruta.
CBN_DROPDOWN Anger att listan i en nedrullningsbara kombinationsruta eller listruta håller på att öppnas.
CBN_EDITCHANGE Anger att användaren har ändrat texten i redigeringskontrollen för en enkel eller nedrullningsbar kombinationsruta. Den här meddelandekoden skickas efter att den ändrade texten visas.
CBN_EDITUPDATE Anger att användaren har ändrat texten i redigeringskontrollen för en enkel eller nedrullningsbar kombinationsruta. Den här meddelandekoden skickas innan den ändrade texten visas.
CBN_ERRSPACE Anger att kombinationsrutan inte kan allokera tillräckligt med minne för att utföra en begäran, till exempel att lägga till ett listobjekt.
CBN_KILLFOCUS Anger att kombinationsrutan håller på att förlora indatafokuset.
CBN_SELCHANGE Anger att den aktuella markeringen har ändrats.
CBN_SELENDCANCEL Anger att markeringen som gjorts i listrutan, medan den togs ned, ska ignoreras.
CBN_SELENDOK Anger att markeringen som gjorts i listrutan, medan den togs ned, ska godkännas.
CBN_SETFOCUS Anger att kombinationsrutan har fått indatafokuset.

 

Standardbeteende för kombinationsruta

I den här tabellen beskrivs de meddelanden som hanteras specifikt av den fördefinierade combobox-klassfönstrets procedur.

Meddelande Beskrivning
CB_ADDSTRING Skickar ett LB_ADDSTRING meddelande till listfönstret för att lägga till ett listobjekt.
CB_DELETESTRING Skickar ett LB_DELETESTRING meddelande till listfönstret för att ta bort ett listobjekt.
CB_DIR Lägger till filnamnen som matchar de angivna attributen och sökvägen till listan.
CB_FINDSTRING Skickar ett LB_FINDSTRING meddelande till listfönstret. Det här meddelandet returnerar indexet för det första listobjektet som börjar med den angivna texten.
CB_FINDSTRINGEXACT Skickar ett LB_FINDSTRING meddelande till listfönstret. Det här meddelandet returnerar indexet för det första listobjektet som exakt matchar den angivna texten.
CB_GETCOUNT Skickar ett LB_GETCOUNT meddelande till listfönstret. Det returnerar antalet listobjekt.
CB_GETCURSEL Skickar ett LB_GETCURSEL meddelande till listfönstret. Det returnerar indexet för det markerade objektet, om det finns.
CB_GETDROPPEDCONTROLRECT Fyller den angivna rektangelstrukturen med skärmkoordinaterna i en listruta.
CB_GETDROPPEDSTATE Returnerar TRUE- om en listruta är öppen. annars returneras FALSE-.
CB_GETDROPPEDWIDTH Returnerar den minsta tillåtna bredden i bildpunkter i listrutan.
CB_GETEDITSEL Skickar ett EM_GETSEL meddelande till redigeringskontrollen och returnerar start- och slutpositionen för den aktuella markeringen. I listrutor returnerar fönsterproceduren CB_ERR.
CB_GETEXTENDEDUI Returnerar TRUE- om kombinationsrutan är en listruta eller listruta och flaggan utöka användargränssnittet har angetts. annars returneras FALSE-.
CB_GETHORIZONTALEXTENT Skickar ett LB_GETHORIZONTALEXTENT meddelande till listfönstret. Den returnerar den rullningsbara bredden i bildpunkter i listrutan.
CB_GETITEMDATA Skickar ett LB_GETITEMDATA meddelande till listfönstret. Det returnerar värdet som är associerat med det angivna listobjektet.
CB_GETITEMHEIGHT Skickar ett LB_GETITEMHEIGHT meddelande till listfönstret. Den returnerar höjden i bildpunkter för det angivna ägarritade listobjektet.
CB_GETLBTEXT Skickar ett LB_GETTEXT meddelande till listfönstret. Den kopierar den angivna listtexten till den angivna bufferten.
CB_GETLBTEXTLEN Skickar ett LB_GETTEXTLEN meddelande till listfönstret. Den returnerar längden i TCHARs, för den angivna listtexten.
CB_GETLOCALE Skickar ett LB_GETLOCALE meddelande till listfönstret. Den returnerar det aktuella nationella språket för listan.
CB_GETMINVISIBLE Hämtar det minsta antalet synliga objekt i listrutan i en kombinationsruta.
CB_GETTOPINDEX Skickar ett LB_GETTOPINDEX meddelande till listfönstret. Det returnerar indexet för det första synliga objektet i listrutan.
CB_INITSTORAGE Skickar ett LB_INITSTORAGE meddelande till listfönstret. Det initierar utrymme för det angivna antalet objekt och det angivna antalet byte för objektsträngar.
CB_INSERTSTRING Skickar ett LB_INSERTSTRING meddelande till listfönstret. Det infogar ett listobjekt på den angivna positionen.
CB_LIMITTEXT Skickar ett EM_LIMITTEXT meddelande till redigeringskontrollen. Den anger det maximala antalet tecken som en användare kan ange i redigeringskontrollen. I listrutor returnerar fönsterproceduren CB_ERR.
CB_RESETCONTENT Skickar ett LB_RESETCONTENT meddelande till listfönstret och tar bort innehållet i listan.
CB_SELECTSTRING Skickar ett LB_SELECTSTRING meddelande till listfönstret. Det väljer det första listobjektet, om det finns, som börjar med tecknen i den angivna texten.
CB_SETCURSEL Skickar ett LB_SETCURSEL meddelande till listfönstret och anger den aktuella markeringen.
CB_SETDROPPEDWIDTH Anger den minsta tillåtna bredden i bildpunkter i listrutan.
CB_SETEDITSEL Skickar ett EM_SETSEL meddelande till redigeringskontrollen. Den väljer det angivna textintervallet. I listrutor returnerar fönsterproceduren CB_ERR.
CB_SETEXTENDEDUI Anger eller avmarkerar flaggan för utökat användargränssnitt. Den här flaggan ändrar de nycklar som öppnar och stänger listan i en listruta eller listruta. Om kombinationsrutan är en enkel kombinationsruta returnerar fönsterproceduren CB_ERR.
CB_SETHORIZONTALEXTENT Skickar ett LB_SETHORIZONTALEXTENT meddelande till listfönstret. Den anger den rullningsbara bredden i bildpunkter i listrutan.
CB_SETITEMDATA Skickar ett LB_SETITEMDATA meddelande till listfönstret. Det associerar det angivna värdet med ett listobjekt.
CB_SETITEMHEIGHT Skickar ett LB_SETITEMHEIGHT meddelande till listfönstret. Den anger höjden på det angivna ägarritade listobjektet eller markeringsfältet.
CB_SETLOCALE Skickar ett LB_SETLOCALE meddelande till listfönstret och anger det aktuella språket för listan. Nationella inställningar påverkar hur listan sorteras om den har CBS_SORT format och strängar läggs till med hjälp av CB_ADDSTRING.
CB_SETMINVISIBLE Anger det minsta antalet synliga objekt i listrutan i en kombinationsruta.
CB_SETTOPINDEX Skickar ett LB_SETTOPINDEX meddelande till listfönstret. Den bläddrar i listrutan så att det angivna objektet ligger överst i det synliga intervallet.
CB_SHOWDROPDOWN Visar eller döljer listrutan. Det här meddelandet påverkar inte enkla kombinationsrutor.
WM_CHAR Bearbetar teckenindata. I listrutor skickas det här meddelandet till listfönstret, som flyttar markeringen till det första objektet som börjar med det angivna tecknet. I enkla och nedrullningsbara kombinationsrutor skickas det här meddelandet till redigeringskontrollen.
WM_CLEAR Tar bort redigeringsmarkeringen. I enkla och nedrullningsbara kombinationsrutor bearbetar redigeringskontrollen det här meddelandet. I listrutor returnerar fönsterproceduren CB_ERR.
WM_COMMAND Bearbetar meddelanden från redigeringskontrollen och listfönstret och skickar motsvarande aviseringskoder för kombinationsrutor till det överordnade fönstret.
För redigeringskontrollmeddelanden kan fönsterproceduren uppdatera listfönstrets aktuella val, caret-index och toppindex. För listmeddelanden kan fönsterproceduren uppdatera innehållet i urvalsfältet.
WM_COMPAREITEM Skickar meddelandet till det överordnade fönstret så att programmet kan ange den relativa sorteringspositionen för två ägarritade listobjekt. Kombinationsrutans fönster tar emot det här meddelandet från listfönstret.
WM_COPY Kopierar redigeringsmarkeringen till Urklipp. I enkla och nedrullningsbara kombinationsrutor bearbetar redigeringskontrollen det här meddelandet. I listrutor returnerar fönsterproceduren CB_ERR.
WM_CREATE Initierar kombinationsrutan.
WM_CUT Tar bort redigeringsmarkeringen och placerar den i Urklipp. I enkla och nedrullningsbara kombinationsrutor bearbetar redigeringskontrollen det här meddelandet. I listrutor returnerar fönsterproceduren CB_ERR.
WM_DELETEITEM Skickar meddelandet till det överordnade fönstret och meddelar programmet att ett listobjekt har tagits bort. Kombinationsrutans fönster tar emot det här meddelandet från listfönstret.
WM_DRAWITEM Skickar meddelandet till det överordnade fönstret så att programmet kan måla det angivna listobjektet. Kombinationsrutans fönster tar emot det här meddelandet från listfönstret. Fönsterproceduren kan också komma från det här meddelandet för att programmet ska måla urvalsfältet i en listruta.
WM_ENABLE Anger tillståndet för att aktivera eller förbjuda mus- och tangentbordsinmatning.
WM_ERASEBKGND Returnerar 1, vilket anger att bakgrunden raderas.
WM_GETDLGCODE Returnerar en kombination av värdena DLG_WANTCHARS och DLGC_WANTARROWS.
WM_GETFONT Returnerar handtaget till det aktuella teckensnitt som kombinationsrutan ritar sin text med.
WM_GETTEXT Kopierar innehållet i markeringsfältet till den angivna bufferten. I enkla och nedrullningsbara kombinationsrutor bearbetar redigeringskontrollen det här meddelandet.
WM_GETTEXTLENGTH Returnerar längden, i tecken, på texten i markeringsfältet. I enkla och nedrullningsbara kombinationsrutor bearbetar redigeringskontrollen det här meddelandet.
WM_KEYDOWN Bearbetar tangentbordsindata som inte är förtecken. I listrutor skickas det här meddelandet till listfönstret, som kan visa eller dölja sig själv, eller ändra dess aktuella markering eller caret-index. I enkla och nedrullningsbara kombinationsrutor skickas det här meddelandet till redigeringskontrollen. Redigeringskontrollen skickar vissa nycklar till listfönstret, till exempel UPP- och NEDPIL-tangenterna och F4-nyckeln.
WM_KILLFOCUS Döljer markeringen i markeringsfältet och stänger listrutan om det behövs. Om fönstret som tar emot indatafokus är en del av kombinationsrutan (till exempel redigeringskontrollen) ignoreras det här meddelandet.
WM_LBUTTONDBLCLK Samma som WM_LBUTTONDOWN.
WM_LBUTTONDOWN Ställer in fokus på kombinationsrutan och för listrutekombinationsrutor och listrutor kan du öppna eller stänga listan. Om listan öppnas fångar fönsterproceduren musen för att aktivera markeringen genom att dra och släppa musknappen.
WM_LBUTTONUP Släpper musfångsten om musen öppnade listan.
WM_MEASUREITEM Skickar meddelandet till det överordnade fönstret så att programmet kan ändra innehållet i den angivna MEASUREITEMSTRUCT- struktur. Kombinationsrutans fönster tar emot det här meddelandet från listfönstret.
WM_MOUSEMOVE Skickar meddelandet till listfönstret om musen har öppnat listan och musknappen fortfarande är nere. På så sätt kan en användare välja ett objekt genom att dra pekaren till ett listobjekt och sedan släppa knappen.
WM_NCCREATE Allokerar en intern datastruktur som används av kombinationsrutans fönsterprocedur.
WM_NCDESTROY Frigör resurser som allokerats som svar på meddelandet WM_NCCREATE.
WM_PAINT Målar den ogiltiga regionen i kombinationsrutan. Om wParam- inte är NULL-antas det vara en handtag för enhetskontext (DC) som skickas från en underklassfunktion. I fönsterproceduren används den angivna domänkontrollanten i stället för att anropa BeginPaint och EndPaint.
WM_PASTE Ersätter redigeringsmarkeringen med innehållet i Urklipp. I enkla och nedrullningsbara kombinationsrutor bearbetar redigeringskontrollen det här meddelandet. I listrutor returnerar fönsterproceduren CB_ERR.
WM_SETFOCUS Ställer in fokus på redigeringskontrollen eller i listrutor invertera markeringsfältet och aktiverar caret i listfönstret.
WM_SETFONT Sparar det angivna teckensnittshandtaget i en intern struktur, justerar dimensionerna för markeringsfältet och listan och ogiltigförklarar kombinationsrutefönstret. Text i markeringsfältet och listan visas i det sparade teckensnittet.
WM_SETREDRAW Anger eller rensar flaggan för att rita om. Om redraw-flaggan är avmarkerad, ommålas inte kombinationsrutan förrän flaggan har angetts igen.
WM_SETTEXT Anger innehållet i redigeringskontrollen. I enkla och nedrullningsbara kombinationsrutor bearbetar redigeringskontrollen det här meddelandet. I listrutor returnerar fönsterproceduren CB_ERR.
WM_SIZE Ändrar storlek på de underordnade fönstren om det behövs.
WM_SYSKEYDOWN Öppnar eller stänger listrutan beroende på vilken piltangent användaren tryckte på.

 

Alla andra meddelanden skickas till funktionen DefWindowProc för standardbearbetning.