Zum Inhalt springen

Kontextmenü für RichEdit (MFC, VC++ 6.0)


Technician

Empfohlene Beiträge

  • 1 Monat später...

Hallo,

dieser Thread ist schon etwas länger, aber ich hatte mich in der Zwischenzeit nicht mit dem Problem befasst.

Folgender Code funktioniert einwandfrei, um ein Kontextmenü über dem Button IDC_BUTTON1 anzeigen zu lassen:


	CMenu mnuPopupSubmit;

	mnuPopupSubmit.LoadMenu(IDR_CONSCONT);


	CButton *pButton;

	pButton = reinterpret_cast<CButton *>(GetDlgItem(IDC_BUTTON1));


	CRect rectSubmitButton;

	pButton->GetWindowRect(&rectSubmitButton);


	CMenu *mnuPopupMenu = mnuPopupSubmit.GetSubMenu(0);


	if( rectSubmitButton.PtInRect(point) ) // Since the user right-clicked the button, display the context menu

		mnuPopupSubmit.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

Nun will ich denselben Effekt natürlich bei einem RichEdit-Feld erreichen. Der Code lautet:

CMenu mnuPopupSubmit;

	mnuPopupSubmit.LoadMenu(IDR_CONSCONT);


	CRichEditCtrl* pCtrl;

	pCtrl = (CRichEditCtrl*)GetDlgItem(IDC_CONSOLE);


	CRect rectSubmitButton;

	pCtrl->GetWindowRect(&rectSubmitButton);


	CMenu *mnuPopupMenu = mnuPopupSubmit.GetSubMenu(0);

	//ASSERT(mnuPopupMenu);


	// Find out if the user right-clicked the button

	// because we are interested only in the button

	if( rectSubmitButton.PtInRect(point) ) // Since the user right-clicked the button, display the context menu

	{	mnuPopupSubmit.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);


	}

Mein Problem ist folgendes:

Wenn ich ins RichEdit-Feld klicke, wird dieses markiert (I-Cursor erscheint und ich kann etwas ins RichEdit-Feld eintippen) und wenn der I-Cursor im Feld ist, kann kein Kontextmenü angezeigt werden.

Denselben Effekt habe ich auch, wenn ich ein "programmweites Kontextmenü", also eines das nicht auf einen bestimmten Bereich beschränkt ist, habe: es funktioniert überall, nur nicht im RichEdit-Feld.

An der Event-Mask kann es nicht liegen:

pCtrl = (CRichEditCtrl*)GetDlgItem(IDC_CONSOLE);

lMask = pCtrl->GetEventMask();

lMask |= ENM_CHANGE;

lMask |= ENM_KEYEVENTS;

lMask |= ENM_MOUSEEVENTS;

pCtrl->SetEventMask(lMask);

Wie kann ich dieses Problem lösen?

(Nochmal zum Ausgangsproblem: Text in RichEdit-Feld markiert, Rechtsklick soll Kontextmenü anzeigen. Markierung darf also nicht verloren gehen. Soll genauso funktionieren wie man das z.B. von Textverarbeitungsprogrammen kennt.)

Viele Grüße,

Technician

*hoffend*

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...