Häckchen im Menü setzen / UPDATE_COMMAMD_UI
-
Hallo zusammen,
ich habe einen Menüpunkt mit der ID_BSP. Diesen Menüpunkt gibt es im Hauptmenü UND im Contextmenü (rechte Maustaste). Ich habe die Nachricht UPDATE_COMMAND_UI überschrieben:
void CMyView::OnUpdateBsp(CCmdUI* pCmdUI) // Häkchen ein-/ausschalten
{
if (blabla) pCmdUI->SetCheck(0);
else pCmdUI->SetCheck(1);
}Im Hauptmanü wird das Häckchen auch gesetzt, aber im Contextmenü nicht.
Woran kann das liegen?Gruß
Andrea
-
Du hast für das Kontextmenü keinen CCmdUI-Handler definiert. Da dieses Menü dynamisch erstellt wird, musst Du auch das CCmdUI dynamisch erstellen.
[ Dieser Beitrag wurde am 02.04.2003 um 09:14 Uhr von RenéG editiert. ]
-
Danke RenéG, aber wo mache ich das am besten?
-
@Rene: Fast richtig. Wenn das Kontext-Menü die gleichen Menübefehl-IDs wie das normale Menü hat funktioniert es auch nicht richtig. Das ist ein Bug in der MFC.
unter [url] http://www.codeguru.com/menu/popups.shtml [/url] ist ein Workaround beschrieben.
Es reicht OnInitMenuPopup() zu überladen.
-
Danke für den Link, Frank. Dort gab es folgenden Tipp und jetzt geht es.
void CSchneckenprogrammView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
menu.LoadMenu(IDR_CONTEXT);// so geht es nicht (Parent ist die View):
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this);// so geht es (Parent ist das MainFrame):
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, AfxGetMainWnd());}
Kürzer kriegt man es wirklich nicht hin.
Andrea
-
@Frank
Wieso 'fast richtig' ?? Es ist vollkommen richtig. Der Workaround von codeguru nutzt den Effekt, dass das Hauptprogramm für Menüs einen CCmdUI-Handler erstellt.
Nachteil ist folgender:
Sämtliche WM_COMMAND-Befehle werden zuerst an das Hauptprogramm geleitet, obwohl sicherlich fast alle IDs erst im View be- bzw. verarbeitet werden.
-
Du hast für das Kontextmenü keinen CCmdUI-Handler definiert. Da dieses Menü dynamisch erstellt wird, musst Du auch das CCmdUI dynamisch erstellen.
Wie gesagt ich hatte immer mal wieder das Problem, daß es die Kontext-Menüs nicht in den richtigen Zustand versetzt hat.
Laufzeitprobleme konnte ich bis jetzt noch nicht feststellen. Bei Andrea scheints ja jetzt zu gehen