Coyote03 Geschrieben 30. Oktober 2008 Teilen Geschrieben 30. Oktober 2008 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. Oktober 2008 Teilen Geschrieben 30. Oktober 2008 Grundlagen der Fehlersuche, Kapitel 1: Rückgabewert prüfen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Coyote03 Geschrieben 30. Oktober 2008 Autor Teilen Geschrieben 30. Oktober 2008 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. Oktober 2008 Teilen Geschrieben 30. Oktober 2008 Den von CheckMenuItem? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Coyote03 Geschrieben 30. Oktober 2008 Autor Teilen Geschrieben 30. Oktober 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Coyote03 Geschrieben 30. Oktober 2008 Autor Teilen Geschrieben 30. Oktober 2008 d.h. ich sollte den Haken an anderer Stelle herausnehmen, aber wo? Ich finde die richtige Stelle nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. Oktober 2008 Teilen Geschrieben 30. Oktober 2008 Warum erstellst du nicht einfach einen Update-UI-Handler im Mainframe? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Coyote03 Geschrieben 30. Oktober 2008 Autor Teilen Geschrieben 30. Oktober 2008 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. Oktober 2008 Teilen Geschrieben 30. Oktober 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Coyote03 Geschrieben 30. Oktober 2008 Autor Teilen Geschrieben 30. Oktober 2008 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.