Button aktiv/inaktiv machen
-
EnableWindow() ist hierfür der richtige Befehl. Wenn du es auf TRUE setzt, dann wird das Fenster aktiv, bei FALSE inaktiv.
Controls werden in OnInitialUpdate() initialisiert. Sobald die Verbindung zur Datenbank steht, kannst du ja den Button enablen.
-
Vielen Dank euch zwei.
Hat jetzt wunderbar funktioniert mit den Buttons die sich im SDI-Fenster befinden.
Allerdings weiß ich jetzt noch nicht wie ich die Button im Menu oben (IDR_MAINFRAME) zunächst deaktivier und später wieder aktivier. Eigentlich kann man das ja im Ressourceneditor machen. Dort werden sie dann auch grau, aber sobald ich das Programm starte sind sie wieder aktiv. Irgendwie komisch.
Hat jemand ne Idee oder Lösung.Gruß Gabele
-
Stichwort: EnableMenuItem
-
Ah ok danke, aber ich check noch nicht wirklich wo ich das jetzt reinpacken muss. Hab schon in der MSDN geschaut. Komme aber nicht wirklich weiter.
Muss ich es irgendwo in der Mainfraim.cpp einbinden?Gruß Gabele
-
-
Hmm, ich komm irgendwie doch nicht weiter.
Ich kann die Button jetzt zwar aktivieren wenn ich sie vorher deaktiviert habe. Allerdings mache ich das in der ManiFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
dort habe ich das so reingeschrieben:CMenu* pmenu; pmenu = GetMenu(); pmenu->EnableMenuItem(1, MF_BYPOSITION | MF_ENABLED); pmenu->EnableMenuItem(2, MF_BYPOSITION | MF_ENABLED); SetMenu(pmenu);
Aber wie kann ich diese OnCreate Funktion aufrufen?
Versuche es so:
void CDatenbankprojektGUI2View::OnDateiMitdatenbankverbinden(){ CDatenbankVerbinden datenbankVerbinden; if(datenbankVerbinden.DoModal()==IDOK) { CMainFrame main; main.OnCreate(????); //aktivieren(); } }
Was muss ich an OnCreate übergeben? Geht das so überhaupt?
Und dann kommt noch immer der Fehler:error C2248: "CMainFrame::CMainFrame" : Kein Zugriff auf protected Element, dessen Deklaration in der Klasse "CMainFrame" erfolgte
wie kann ich CMainFrame Puplic machen? Geht das überhaupt?
Danke!
Gruß Gabele
-
Ein Blick in die MSDN lohnt sich:
CWnd::OnCreate
The framework calls this member function when an application requests that the Windows window be created by calling the Create or CreateEx member function.
OnCreate wird also von deinem Programm aufgerufen, wenn es das MainFrame erzeugt! Keine Ahnung wie du darauf kommst das in OnCreate() reinzupacken...
Also, nochmal zum Mitschreiben:
- Initialisieren der Menueinträge in OnInitialUpdate()
- Bei Änderungen während das Programm läuft packst du deinen Code entweder in eine bestehende Methode (z.B. OnButtonClick()) oder du erstellst eine eigene Methode, die dann wiederum an geeigneter Stelle aufgerufen wird.
-
Ah ok, hab ich kappiert.
Aber wenn ich diesen CodeCMenu* pmenu; pmenu = GetMenu(); pmenu->EnableMenuItem(1, MF_BYPOSITION | MF_ENABLED); pmenu->EnableMenuItem(2, MF_BYPOSITION | MF_ENABLED); SetMenu(pmenu);
in irgendeine Methode packe, bekomme ich immer einen Debug Assertion Failed:
File: afxwin1.inl
Line: 1030muss ich noch was in meinen Code einfügen?
-
1. Wo führst Du das aus? Wirklich im Kontext des Fensters, dass auch ein Menü hat.
2. BTW: SetMenu am Ende ist Unfug!
-
Ich führe es in dieser Methode aus:
void CDatenbankprojektGUI2View::OnDateiMitdatenbankverbinden()
sorry das ich´s grad nit check, steh wohl grad bisle auf der Leitung.
Gruß Fabi
-
Ein View hat niemals ein Menu!
Nur sein Frame!Wenn Du jedoch eine Doc/View Architektur hast, dann solltest Du nur OnUpdateHandler benutzen!