Kein OnUpdate... im Menü-Dialog?
-
Hallo MFC-Experten,
Ich habe ein Problem, das Ihr bestimmt leicht lösen könnt.
Wenn es einen Menübefehl gibt, dann kann man eine Kommandofunktion schreiben, die wie folgt aussieht:void CPCLinkDlg::OnCommOpen() { if (m_commctrl.GetPortOpen()) { m_commctrl.SetPortOpen(FALSE); } else { m_commctrl.SetPortOpen(TRUE); } }
Soll heißen, daß dann der Port geschlossen wird, wenn er offen ist und umgekehrt. Funktioniert auch in meinem Dialog-basierenden MFC-Programm auch ganz hervorragend, aber die folgende Funktion, die die Menüeinträge „updaten“ soll, ganz und gar nicht:
void CPCLinkDlg::OnUpdateCommOpen(CCmdUI* pCmdUI) { if (m_commctrl.GetPortOpen()) { pCmdUI->SetText(_T("&Port schließen)); } else { pCmdUI->SetText(_T("&Port öffnen")); } pCmdUI->Enable(); }
Es soll dann, wenn der Port offen ist, der Menüeintrag “Port schließen“ heißen und wenn er bereits geschlossen ist, dann “Port öffnen“ heißen. Das funktioniert in SDI- und MDI-Programmen auch ganz hervorragend, aber in Dialog-basierender Anwendung eben nicht, denn dort wird das Menü eben nur in den Dialog eingehängt.
Also, die Menübefehle selbst funktionieren einwandfrei, aber nicht die Update-Commands. Aber ich habe das mit dem Debugger geprüft, in die Update-Funktionen läuft das Programm richtig hinein, es werden nur die Menüeinträge nicht verändert. Das ist mit allen anderen Menüeinträgen auch so.
Wer kann mir helfen.
Vielen Dank
Manni alias taigatiger
-
Okay, hier scheint das keinen wirklich zu interessieren. Aber mir ist das immer noch unerklärlich. Weil ich es nicht anders weiß und hier keinen besseren Rat gefunden habe, habe ich es anders gemacht:
CMenu* pMenu = AfxGetMainWnd()->GetMenu(); if (m_commctrl.GetPortOpen()) { // Port schließen m_commctrl.SetPortOpen(FALSE); pMenu->ModifyMenu(ID_COMM_OPEN, MF_BYCOMMAND | MF_STRING, ID_COMM_OPEN, "&Port Open"); } else { // Port öffnen m_commctrl.SetPortOpen(TRUE); pMenu->ModifyMenu(ID_COMM_OPEN, MF_BYCOMMAND | MF_STRING, ID_COMM_OPEN, "&Port Close"); }
Das funktioniert auch mit aktivieren/deaktivieren einwandfrei, macht es aber etwas umständlicher, weil die Kontrolle vollständig beim Anwender liegt.
Vielen Dank nochmals
und alles Gute weiterhin.
Manni
-
Ich hätte dir gestern Abend nur die Antwort geben können, dass es so im Dialog nicht geht und es da irgendwo einen Workaround beschrieben gibt.
Hätte dich wohl auch nicht glücklich gemacht, oder?
Außerdem darfst du es hier nicht eilig haben. Je nach Tageszeit sind andere Leute mit anderem Wissen da. Cool down.
-
Trotzdem vielen Dank. Lange warten wollte ich nicht, denn ich will mir nur ein kleies Menü machen, mit dem ich die Temperaturen und den Zustand meiner Holzheizung auf dem PC kontrollieren kann, damit ich nicht immer in den Keller rennen muß. Deshalb nun MFC in epischer Breite zu lernen ist dafür nicht notwendig, aber eilig hatte ich es schon. So habe ich eine Lösung gefunden, die vielleicht auich einem anderen weiterhelfen kann.
Alles Gute weiterhin
Manni
-
taigatiger schrieb:
[...]ein kleies Menü machen, mit dem ich die Temperaturen und den Zustand meiner Holzheizung auf dem PC kontrollieren kann, damit ich nicht immer in den Keller rennen muß.
Wow, cool.
So habe ich eine Lösung gefunden, die vielleicht auich einem anderen weiterhelfen kann.
Dafür auch danke für Posten.