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


Anmelden zum Antworten