Kontextmenu in CListCtrl
-
Hi all
Ich habe diverse Einträge in einer CListCtrl eingetragen. Jetzt möchte ich, dass wenn ich mittels der rechten Maustaste auf ein Element klicke, dass ein Kontextmenü eingeblendet wird - natürlich nicht irgendwo, sondern dort, wo die Maustaste geklickt wurde.
Mit dem folgenden Code kann ich ein Kontextmenü aufrufen:
OnRButtonDown(UINT nFlags, CPoint point){ CMenu* pMenu = new CMenu; pMenu->LoadMenu(IDR_MENU_CONTEXT); ClientToScreen(&point); CMenu* pSubMenu = pMenu->GetSubMenu(0); pSubMenu->TrackPopupMenu( TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this); }
Diese Methode bezieht sich auf den Rechtklick auf den Dialog
Das funktioniert so weit. Klicke ich jedoch auf die Listbox, passiert NIX!!
Okay, die Listbox kennt selber auch eine NM_RCLICK Methode:OnRclick_List2(NMHDR* pNMHDR, LRESULT* pResult){ // code der ausgeführt wird, wenn man auf die Listbox klickt // zuerst mit getSel() das angewählte Element ermitteln, DANN das Popupmenu aufrufen // aber eben unter Berücksichtigung der X,Y Punkte, die ich nicht habe }
Aber. Wie komme ich nun an die X und Y Koordinaten? Sind die irgendwie in pNMHDR und pResult enthalten? Die MSDN meint nein.
Also. Wie kann ich eine PopUp-Menu Message aufrufen, wenn ich auf einen Eintrag in der Listbox klicke?
-
Ich hab mal schnell meine Kontextmenüfunktion rauskopiert, eigentlich müßtest du erkennen, was du brauchst.
void CSortListCtrl::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menu; // Kontextmenü laden menu.LoadMenu(IDR_MNU_KTXT); // Erstes Untermenü CMenu * pContextMenu = menu.GetSubMenu(0); // Kontextmenü anzeigen pContextMenu->TrackPopupMenu(TPM_LEFTALIGN + TPM_RIGHTBUTTON, point.x, point.y, this);//AfxGetMainWnd()); }
-
estartu_de schrieb:
Ich hab mal schnell meine Kontextmenüfunktion rauskopiert, eigentlich müßtest du erkennen, was du brauchst.
void CSortListCtrl::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menu; // Kontextmenü laden menu.LoadMenu(IDR_MNU_KTXT); // Erstes Untermenü CMenu * pContextMenu = menu.GetSubMenu(0); // Kontextmenü anzeigen pContextMenu->TrackPopupMenu(TPM_LEFTALIGN + TPM_RIGHTBUTTON, point.x, point.y, this);//AfxGetMainWnd()); }
Danke für die schnelle Hilfe, aber ich glaube nicht, dass ich diesen Code auf mein standart Programm anwenden kann. CListCtrl kennt keine Methode OnContextMenü oder wie heisst die Nachricht, die dabei ausgelöst wird und ein CPoint gleich noch mitliefert?
-
Die Nachricht heißt WM_CONTEXTMENU. Da soll man mal drauf kommen...
-
MFK schrieb:
Die Nachricht heißt WM_CONTEXTMENU. Da soll man mal drauf kommen...
*lol* danke. Dabei habe ich doch jede Nachricht angeschaut, die man eigentlich benützen könnte....
-
Wenn du mal einen Nachrichtennamen nicht kennst, aber den des Handlers, kannst du erstmal folgendes versuchen:
Ersetze On durch WM_ und schreibe alles groß.