Kontextmenu nur über CTreeCtrl öffnen



  • Hallo!

    Ist es möglich, ein Kontextmenu nur bei Rechtsklick auf ein einzelnes Control (in diesem Fall ein COXTreeCtrl, die Ultimate Toolbox Variante zu CTreeCtrl) erscheinen zu lassen?

    Momentan fange ich die

    ON_WM_CONTEXTMENU()
    

    ab und öffne folgendermaßen das Kontextmenu ( QT gekürzt )

    void CDlg::OnContextMenu(CWnd* pWnd, CPoint ptMousePos) 
    {
       CMenu menu;
    
       menu.LoadMenu( IDR_MENU1 );
    
       CMenu * pop;
    
       pop = menu.GetSubMenu(0);
    
       if (ptMousePos.x == -1 && ptMousePos.y == -1)
          ptMousePos = (CPoint) GetMessagePos();
    
       CWnd * pMenuParent = AfxGetMainWnd();
    
       UINT uCmd = pop->TrackPopupMenu( TPM_RETURNCMD | TPM_LEFTALIGN |
                TPM_RIGHTBUTTON, ptMousePos.x, ptMousePos.y,
                pMenuParent, NULL );
    
       menu.DestroyMenu();   
    }
    

    Dies bewirkt aber (logischerweise), dass das Kontextmenu bei jedem Rechtsklick (auch ausserhalb des Controls) aufgebaut wird.
    Ich habe schon versucht, die Message

    NM_RCLICK
    

    abzufangen, aber diese wird nur bei einem Klick auf ein Item des Tree's ausgelöst. Ich möchte aber, dass die Message auch ausgelöst wird, wenn noch keine Items vorhanden sind, und ich im Control rechtsklicke.

    Wie macht man das?

    Viele Grüße und Danke
    Daniel


  • Mod



  • Diesen Link hast Du mir schon mal gesagt 😃 Hab wohl nicht deutlich genug gelesen.
    Für alle die es interessiert, das TreeCtrl als eigene Klasse ableiten und die MessageMap dort implementieren.
    Funktioniert bestens.

    Danke für den Tipp
    Gruß
    Daniel


Anmelden zum Antworten