Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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!

Geschrieben

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?

Geschrieben

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.

Geschrieben

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...

Geschrieben

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.

Geschrieben

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!

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...