CRichEditCtrl: Rechtsklick Event



  • Hi

    Ich habe in meinem Programm ein ganz normales RichEdit Feld (CRichEditCtrl).
    Für dieses würde ich gerne den Rechtsklick darauf behandeln.
    Daher hab ich mit dem MFC ClassWizard (VC++ 6.0) die Funktion/Behandlungsroutine für die Message NM_RCLICK des RichEdit Felds hinzugefügt.
    Meine Funktion dafür sieht jetzt so aus:

    void CMyDialogDlg::OnRclickRichedit(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	// TODO: Add your control notification handler code here
    
    	*pResult = 0;
    
    	MessageBox("RichEdit RECHTSKLICK Test!"); // TEST
    }
    

    Es lässt sich einwandfrei kompilieren.
    Demnach sollte jetzt aber wenn ich auf mein RichEdit Feld einen Rechtsklick mache, die MessageBox angezeigt werden, was aber nicht geschieht.
    Wo liegt mein Fehler? Wie kann ich das zum Laufen bringen?

    Danke schon mal.



  • In der OnInitDialog() hab ich außerdem jetzt noch folgendes hinzugefügt um sicher zugehen dass die Events auch gesendet bzw. empfangen werden.

    DWORD EventMask = m_ctlRichEdit1.GetEventMask();
    EventMask |= ENM_MOUSEEVENTS;
    m_ctlRichEdit1.SetEventMask(EventMask); // m_ctlRichEdit1.SetEventMask(ENM_MOUSEEVENTS);
    

    Funktioniert nach wie vor nicht.
    Hat keiner ne Idee warum das nicht funktioniert oder wie man das anderweitig am geschicktesten lösen könnte?


  • Mod

    NM_RCLICK wird vom CRichEditCtrl nicht unterstützt. IMHO wird dies direkt auf WM_CONTEXTMENU umgewandelt.
    Das beste ist Du erzeugst Deine eigene CRichEditCtrl Klasse und führst einen Subclass durch.
    Was möchtest Du denn machen?



  • leite einfach eine Klasse von CRichEdit ab, und überlade RButtonDown dann hast du den rechtsklick.

    Gruß Matthias



  • Aha ok. Ist es dann eigentlich auch möglich, die NM_RCLICK Message so von dieser abgeleiteten Klasse unterstützen zu lassen, dass die OnRclickRichedit() funktioniert, wenn man sie ganz normal mit dem ClassWizard hinzufügen würde?


  • Mod

    Jein! Du kannst Dein eigenes Handling natürlich einbauen.
    Was wllst Du eigentlich machen? Geht es Dir um das Kontextmenu? Dann Behandle doch selbst WM_CONTEXTMENU!



  • Ja. Im Grunde genommen geht es mir um das Kontext Menu. Wenn dann also WM_CONTEXTMENU sowieso das gleiche ist, wie NR_RCLICK, dann werde ich eben wie du bereits vorgeschlagen hast direkt auch diese Message behandeln.
    Gibt es eigentlich auch schon fertigen Code um ein Standard Rechtsklick Kontext Menu in einem RichEdit Feld zu implementieren? Kann ja wohl nicht das erste mal sein, dass jemand so etwas braucht. 🙂


  • Mod

    Wenn es um Kontextmenüs geht ist WM_CONTEXTMENU immer erste Wahl. Es garantiert eben auch die Behandlung der Taste Kontextmenü, die von den meisten Entwicklern einfach ignoriert wird.
    Such nach TrackPopupMenu und Du findest hundertfach Samplecode für Context Menüs!


Anmelden zum Antworten