Listbox subclass Problem
-
Also ich habe meine ListBox gesubclassed:
LRESULT CALLBACK ClientListProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { // privtae HMENU hSrvPopupMenu; HMENU hSrvSubMenu; POINT pointUser; // switch switch(message){ // right click case WM_RBUTTONDOWN: // load menu hSrvPopupMenu = LoadMenu(hPubInst, MAKEINTRESOURCE(ID_MNU_SRVPOPUP)); hSrvSubMenu = GetSubMenu(hSrvPopupMenu, 0); // save coordinates pointUser.x = LOWORD (lParam); pointUser.y = HIWORD (lParam); // set coordinates ClientToScreen (hWnd, &pointUser); // show popup menu TrackPopupMenu (hSrvSubMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, pointUser.x, pointUser.y, 0, hWnd, 0); break; case WM_COMMAND: MessageBox(0, "kicker", 0, 0); return 0; } return CallWindowProc ((WNDPROC) PrevWndProcList, hWnd, message, wParam, lParam); }
Das mit dem Menü anzeigen klappt einwandfrei. Aber welche Nachricht muss ich jetzt abfangen, wenn ich auf den Eintrag reagieren will, der von dem User im Popupmenü anklickt wurde?? Die nachricht bei WM_COMMAND wird nämlich nicht angezeigt (s.o). Auch nicht, wenn ich statt return 0 ein break nehme!
Was ist falsch??
cu para
-
Wird WM_COMMAND nicht normalerweise an das Parent-Fenster gesendet?
-
Das habe ich mir auch schon gedacht. Wenn ich beim Hauptfenster unter WM_COMMAND eine MessageBox anzeige, wird diese auch angezeigt, wenn ich auf die ListBox klicke. Aber wenn ich in switch(LOWORD(wParam)) auswerte nach dem Menüeintrag wird nicht reagiert.
-
Entferne mal das Flag TPM_RETURNCMD.
-
ich glaube ich brauche WM_MENUSELECT oder??
Laut spy++ jedenfallscu para
-
Original erstellt von -King-:
Entferne mal das Flag TPM_RETURNCMD.Danke -King- es geht einwandfrei.
cu para