Menü bei CListCtrl



  • Hallo,

    ich habe eine CListCtrl in Form einer Tabellenansicht mit mehreren Einträgen. Ich möchte nun, daß sich beim Rechtsklick auf einen Eintrag ein Menü öffnet (wie bei üblichen anderen Programmen) und man dann "Löschen", "Ändern" u.s.w auswählen kann. Welche Schritte muß ich durchführen, um so was zu bekommen ?



  • NM_RCLICK abfangen und dann alle selektierten Einträge je nach Menü-Auswahl modifizieren.

    Tipp:
    Bei CMenu::TrackPopupMenu kann man die Flags TPM_RETURNCMD und TPM_NONOTIFY angeben. So kann man gleich den Rückgabewert nehmen und die gewünschte Aktion ausführen.



  • Ja, die Nachricht abfangen ist klar.
    Nur wie erstelle ich das Menü selbst ? Im Ressourceneditor einfach unter 'Menü' ein neues Menü erstellen und dem Menü eine Klasse zuordnen ? Wenn ja: Von welcher Klasse muß dieses Menü abgeleitet werden ?
    Und wie zeige ich das Menü nun in der OnKlick Methode ? Hast du ein Beispielcode ?
    Währe nett, wenn mir jemand hilft !!!



  • Ich habe mal ein Beispiel rausgekramt:

    void CUOBodView::OnRclickLstLbodSmith(NMHDR* pNMHDR, LRESULT* pResult)
    {
    int c = m_lstBod.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED | LVNI_FOCUSED);
    CUOBodDoc* pDoc=GetDocument();

    POINT Point;

    GetCursorPos(&Point);

    CMenu menu;
    CMenu* pPopup;
    menu.LoadMenu(IDR_BOD);
    switch(pDoc->m_nSelektion&0xff)
    {
    case 0:
    {
    if (c<0)
    pPopup = menu.GetSubMenu(0);
    else
    pPopup = menu.GetSubMenu(0);
    }
    break;
    case 1:
    case 3:
    case 5:
    case 7:
    {
    if (c<0)
    pPopup = menu.GetSubMenu(2);
    else
    pPopup = menu.GetSubMenu(1);
    }
    break;
    case 2:
    case 4:
    case 6:
    case 8:
    {
    if (c<0)
    pPopup = menu.GetSubMenu(4);
    else
    pPopup = menu.GetSubMenu(3);
    }
    break;
    }
    pPopup->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
    *pResult = 0;
    }

    Die verschiedenen Popups habe ich in einem menubaum definiert. Das Programm analysiert die Selektion und entscheidet dann, welches Popup geladen wird.

    Roland



  • Bitte denkt auch an die Freunde der Tastatur und verwendet WM_CONTEXTMENU anstelle von NM_RCLICK.



  • Danke euch sehr. Es funktioniert !
    Nur eine kleine Zusatzfrage. Wenn ich TPM_RETURNCMD bei TrackPopupMenu mit angebe: Bekomme ich dann ein int zurück oder einen anderen Datentyp ?



  • Ach... ich Schussel ... ist ja die ID. Danke für eure Hilfe


Anmelden zum Antworten