ich ein Steuerelement List-Box wie folgt erschaffe:Listbox Auswahl Ereignisse (LBN_SELCHANGE und LBN_DBLCLK) nicht
HWND hAvailable = CreateWindowEx(WS_EX_CLIENTEDGE, L"Listbox", NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
LBS_DISABLENOSCROLL | LBS_SORT,
0, 0, 0, 0, hWnd, (HMENU)IDC_AVAILABLELIST,
hInst, NULL);
und Hören für Ereignisse in meinem Callback-Funktion, unter WM_COMMAND wie folgt aus:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
int wmId, wmEvent;
switch (message) {
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId) {
case IDC_AVAILABLELIST:
// We get here, with LBN_SETFOCUS and LBN_KILLFOCUS
if (wmEvent == LBN_SELCHANGE || wmEvent == LBN_DBLCLK) {
// Never gets here!
}
[ ... ]
Das Problem ist, dass wenn ich die Auswahl ändere, ich das neue Objekt sehen kann, aber ich bekomme nicht das passende Ereignis.
Wenn ich ein Element auswähle, erhalte ich ein LBN_SETFOCUS-Ereignis, gefolgt von einem LBN_KILLFOCUS-Ereignis. Jeder Versuch, den aktuell ausgewählten Index mit int idx = SendMessage(hAvailable, LB_GETCURSEL, 0, 0);
zu erhalten, gibt -1 zurück, obwohl ein Element tatsächlich ausgewählt wurde.