Toolbarbutton dynamisch Ein und Aus schalten mit Hilfe von ON_UPDATE_COMMAND_UI
-
Hi Leute,
habe ein kleines Problem würde gerne wenn ein bestimmtes Ereigniss in meiner SDI Anwendung ausgelöst wird einen Button in meiner Toolbar deaktivieren.
Ich weiss das ich diesen Button mit dem Befehl:
void CMainFrame::OnUpdateDialogParameter(CCmdUI* pCmdUI) { pCmdUI->Enable(FALSE); }
deaktivieren kann.
Dies macht er auch wenn ich mein Proggy starte. Nun will ich ihn aber wieder aktivieren wenn mein Proggy schon gestartet ist. Hat da jemand einen Lösungansatz?
Wird die OnUpdateDialogParameter Funktion nur aufgerufen beim Programmstart? oder gibt es auch eine Möglichkeit diese Fkt. aufzurufen wenn das proggy schon gestartet ist?danke im voraus
C u
-
Die Funtkion wird AFAIK immer beim Zeichnen des entsprechenden CCmdUI aufgerufen. Indem du dort eine eigene Variable einfügst, kannst du das Verhalten beinflussen.
Also am Anfang ist die Variable false und wenn du darauf zugreiffen willst, machst sie einfach true..void CMainFrame::OnUpdateDialogParameter(CCmdUI* pCmdUI) { pCmdUI->Enable(myBool); }
Grüsse,
don_basto
-
aus meine CTelAnalyseDoc Klasse auf die Boolsche Variable die ich in der CMainFrame Klasse deklariert habe zugreifen? Habe es jetzt so gemacht wie die gesagt hast: In CMAinFrame die Boolsche Variable m_bParaDialLock deklariert und dann die fkt wie folgt geändert:
void CMainFrame::OnUpdateDialogParameter(CCmdUI* pCmdUI) { // TODO: Code für die Befehlsbehandlungsroutine zum Aktualisieren der Benutzeroberfläche hier einfügen pCmdUI->Enable(m_bParaDialLock); }
Nun will ich aus der DokumentenKlasse meiner SDI Anwendung die Boolsche Variable m_bParaDialLock auf FALSE setzten(damit Toolbarbutton deaktieviert wird). Er schreibt mir aber immer das er diese nicht kennt.
Thx
C u
-
Hi Leute,
wieso kann ich ich nicht auf eine Variable zugreifen die ich in CMainFrame deklariert habe obwohl ich die CMainFrm.h in meine TelAnalyseDoc.cpp includiert habe?
#include "stdafx.h" #include "MainFrm.h" #include "TelAnalyse.h" #include "TelAnalyseDoc.h" #include "CntrItem.h" #include "ParameterDialog.h"
Sehe IMO den Wald vor lauter Bäumen nicht!
Vieleicht findet einer ja den fehler?
Danke
-
CMainFrame* pFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd());
-
-
Ist dir ne Kerze oder ein Kronleuchter aufgegangen?
Soll heißen: Wenn dir nicht komplett klar geworden ist, warum du den Befehl nehmen musst, dann frag lieber nochmal. Sonst hast du bald wieder ein ähnliches Problem.
-
Danke der Nachfrage.
Habe mich ein bißchen in der MSDN umgeschaut. Was Die Funktion AfxGetMainWnd() ist mir klar nur nicht soganz warum das über ein dynamic_cast gemacht werden muss.
Vielleicht kanst du es mir ja mal mit einfachen Wörtern beschreiben?Danke
C u
-
AfxGetMainWnd gibt dir ja die falsche Klasse zurück, nämlich nicht DEINE MainframeKlasse.
Das musst du nun wandeln, sonst hättest du die Variable nicht.Und im Gegensatz zu einem C-Cast gibt dir der dynamic_cast NULL zurück, wenn es nicht geklappt hat.
Das sollte man der Form halber noch prüfen.