Windows Programmierung: Combobox
Willemers Informatik-Ecke
Einführende Informationen über die Programmierung von Kontrollelementen werden hier vorausgesetzt.

Die Combobox verhält sich wie eine Listbox mit angeschlossenem Editfeld.

Stile: Grundformen der Combobox

Man kann zwischen drei Stilen wählen:

CBS_SIMPLE
Die Liste befindet sich ständig aufgeklappt unter dem Editfeld.
CBS_DROPDOWN
Hier klappt die Liste auf Knopfdruck aus. Ansonsten ist nur das Editfeld und die Schaltfläche zum Aufklappen zu sehen.
CBS_DROPDOWNLIST
Das Editfeld ist nicht editierbar, sondern nur mit Werten zu füllen, die sich in der Liste befinden.

Ereignisse der Combobox

EreignisEintritt
CBN_EDITCHANGE erscheint bei jedem Zeichen, das ins Editfeld getippt wird
CBN_EDITUPDATE
CBN_CLOSEUP Immer, wenn die Liste wieder hochschnappt
CBN_DROPDOWN immer, wenn die Liste herunterklappt
CBN_DBLCLK nur bei der statischen Liste auf Doppelklick
CBN_KILLFOCUS wenn die Combobox aktiviert wird
CBN_SETFOCUS wenn die Combobox deaktiviert wird
CBN_SELCHANGE wenn ein Element der Liste gewählt wurde, bevor es in das Editfeld übernommen wird.
CBN_SETFOCUS

Aktionen

Hinzufügen und Entfernen von Einträgen

NachrichtwParamlParamRückgabe
CB_ADDSTRING 0 Zeiger auf den StringIndex des neuen Items, bei Fehler LB_ERR
CB_INSERTSTRING Zielindex des Items, -1 für hinten Zeiger auf den String bei Fehler LB_ERR
CB_DELETESTRING Index des Items 0 bei Fehler LB_ERR
CB_RESETCONTENT 0 0 bei Fehler LB_ERR

AddString hängt Einträge hinten an. ResetContent löscht alle Einträge.

Daten hinterlegen

Damit man den Listbox-Einträgen Programmdaten eindeutig zuordnen kann, ist es möglich, jedem Eintrag einen 4-Byte-Wert hinzuzufügen: genug für einen Zeiger auch auf größere Datenobjekte.

NachrichtwParamlParamRückgabe
CB_SETITEMDATA Index des Items4-Byte-DataBei Fehler LB_ERR
CB_GETITEMDATA Index des Items NULL 4-Byte-Data

Sonstige Aktionen

Selektion eines Elements

SendMessage(hWndCombo, CB_SETCURSEL, nIndex, 0);

Selektiert aus der Liste den Eintrag mit der Nummer nIndex. Die Zählung beginnt bei 0.

Selektion eines Strings

SendMessage(hWndCombo, CB_SELECTSTRING, nIndex, (ULONG)SelString);

Sucht und selektiert aus der Liste den Eintrag, der mit SelString beginnt. Die Sucher beginnt hinter dem Element nIndex. Soll die komplette Liste durchsucht werden, ist nIndex=-1. Der String wird im Editfeld eingetragen.