Veröffentlicht 30. Oktober 200816 j Hallo, ich habe in VS 2005 mit dem MFC-Anwendungsgerüst eine MDI-Anwendung erstellt. Wenn ich das Fenster der View-Klasse zerstöre, möchte ich, dass ein Check-Haken bei einem Menü-Item verschwindet. Durch Überschreiben der Member-Funktion OnDestroy geht es schon mal nicht, es kommt zwar keine Fehlermeldung, aber der Haken verschwindet auch nicht. void CMyApplView::OnDestroy() { CWnd* pMain->AfxGetMainWnd(); CMenu* pMenu->pMain->GetMenu()->GetSubMenu(2); pMenu->CheckMenuItem(ID_APPL,MF_BYCOMMAND|MF_UNCHECKED); } Kann mir jemand Tipps geben, was hier falsch ist? An welcher Stelle muss ich die drei Zeilen oben eintragen, damit der Haken verschwindet? Vielen Dank!
30. Oktober 200816 j Ja stimmt, das hab ich ansatzweise schon gemacht. Leider bin ich zu dämlich das auszuwerten: die Zeiger liefern Adressen zurück alle ungleich 0x00000000 also aus meiner Sicht ok. Ganz doof gefragt, was kann ich denn noch für einen Rückgabewert prüfen, mit dem ich mehr anfangen kann?
30. Oktober 200816 j Doof. OK, in der Tat, der Rückgabewert von CheckMenuItem ist -1, d.h. Menü-Item existiert nicht. Wahrscheinlich, weil die gesamte Menüleiste mit Schliessen des View-Fensters verschwindet.
30. Oktober 200816 j d.h. ich sollte den Haken an anderer Stelle herausnehmen, aber wo? Ich finde die richtige Stelle nicht.
30. Oktober 200816 j Ganz einfach, weil ich keine Ahnung von Update-UI-Handler hab. Magst Du mir sagen, wie das geht? Wahrscheinlich wird es schon eine Tonne Beispiele geben, die ich geflissentlich übersehen habe...
30. Oktober 200816 j Einen Eventhandler für UpdateUI erstellst du genauso wie einen Command-Handler, nur dass du eben nicht COMMAND, sondern UPDATE_COMMAND_UI unter der Command ID auswählst. Der Handler sieht so aus: void CYourClass::OnUpdateYourCommand(CCmdUI *pCmdUI) { } [/code] Über pCmdUI kannst du dann so ziemlich alles mit dem UI-Element machen, z.B. Checks setzen oder entfernen. Das MFC-Framework ruft diesen Handler immer dann auf, wenn es nötig ist - und das kann ziemlich häufig sein. Du solltest in diesem Handler also keine aufwändigen Berechnungen oder Datenbankzugriffe oder so etwas machen. Am einfachsten legst du den Check-Zustand in einer Variablen ab, die du in dem Update-Handler nur noch abfragst.
30. Oktober 200816 j Klotzkopp, dank Dir!! Hat alles geklappt. Für den Menüeintrag ein Update-UI Handler (OnUpdateColorValues) in der Klasse CMainFrame erstellt und dann einfach: void CMainFrame::OnUpdateViewColorvalues(CCmdUI *pCmdUI) { if (FindWindow(0,L"Color values")==NULL) //wenn das Fenster nicht da ist pCmdUI->SetCheck(0); else pCmdUI->SetCheck(1); } Super, danke nochmals!
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.