neues Dialogfenster aus altem aufrufen ?
-
Ich habe bisher immer nur mit einem Fenster gearbeitet
(hab gerade erst mit MFC & C++ angefangen), wie kann ich über
1 Button im Hauptdialog ein neues Dialogfenster aufrufen ?
Den neuen Dialog habe ich schon angelegt. Mir fehlt jetzt der
Code für die Verkettung hierzuIch hoffe mein bestelltes Buch zum Thema kommt bald *G*
Mal wieder mit einem -Danke- vorab
Chris
-
Eine Variable für die Klasse - mit die der Dialog verbunden ist - anlegen und dann mit DoModal() aufrufen!
-
-
Hi,
ich bekomme es irgendwie nicht auf die Reihe..
Bitte erklär doch mal jemand von euch anhand dieser
Eckdaten wie es geht: Ich habe IDD_Dialog1 (OnButton1) und IDD_Dialog2(OnButton2)
für 2 lege ich eine Klasse an, die ich NeuesFenster nenne.
Basisklasse und ID werden autom. übernommen -> dann OKDann gehe ich in Dialog1 und erstelle einen Button.
Dieser Button soll bei klick Dialog2 aufrufen(OnButton2).
Jetzt muß ich mit Strg+W noch eine Member-Variable definieren die ich
zb. m_Fenster nenne ?
Danach wieder zum Dialog1 zurück, Doppelklick darauf, dann bin ich
in der Zeile, wo ich den Code einfüge(den bitte mal so ändern, daß
er meinen Variablen entspricht):CZweitDialog *m_pMyDialog; // Member-Variable
m_pMyDialog = new CZweitDialog;
m_pMyDialog->Create(IDD_DIALOG2, this); // 1. Paramter entspricht dem Resourcen-Namen des ZweitDialog's
m_pMyDialog->ShowWindow(SW_SHOW); // Wenn WS-VISIBLE Flag für den Dialog nicht gesetzt ist, ansonsten kann man diesen Aufruf weglassen !!!Muß hier m_pMyDialog ersetz werden durch mein m_Fenster ?
Was ist dann CZweitDialog bei mir ? = ... evtl NeuesFenster ?Ich glaub es ist einfach nur spät *gähn* :o
C u Chris
-
hi,
wenn du mit m_Fenster schon eine Variable für dein 2. fenster angelegt hast, dann brauchst du nur noch in der button-funktion 'DoModal' aufrufen
void CMyApp::OnButton2() { m_Fenster.DoModal(); }
-
Dommel hat es ja eigentlich schon gesagt:
Ich werde nochmal etwas ausholen...
Du mußt natürlich auch die HeaderDatei des CNeuesFenster sprich Neuesfenster.h in Deinen 1. Dialog includierenWas ist m_Fenster ??? Welchen Typ ???
In die OnButton1() des 1. Dialoges
CNeuesFenster myFenster; myFenster.DoModal(); // und schon siehst Du den Dialog
Non-Modal geht das dann analog so:
CNeuesFenster *m_pMyDialog; // Member-Variable private im 1. Dialog anlegen (ClassWizard oder händisch) !!! m_pMyDialog = new CNeuesFenster; // Entweder in den Konstruktor Deines Dialoges oder in OnInitDialog() Der Rest kommt in die OnButton1() Funktion m_pMyDialog->Create(IDD_DIALOG2, this); // 1. Paramter entspricht dem Resourcen-Namen des ZweitDialog's m_pMyDialog->ShowWindow(SW_SHOW); // Wenn WS-VISIBLE Flag für den Dialog nicht gesetzt ist, ansonsten kann man diesen Aufruf weglassen !!!
Was ich bei mir im Beispiel noch vergessen habe... bessere ich gleich aus:
Im Destructor bzw. PostNcDestroy des 1. Dialoges müssen Wir unsere Instanz m_pMyDialog des 2. Dialoges wieder freigeben !!!
delete m_pMyDialog;
Hoffe das es jetzt ein wenig verständlicher für Dich ist.
MfG veganza
-
Ok jetzt läuft es wunderbar.
Great, bedarf nur manchmal einer genauen Erklärung.
Würd es ein gutes Buch für solche Grundlagen geben...
ich würds sofort kaufenEuer
Chris
-
Vorweg: Freut mich das es jetzt funktioniert !!!
Diese Grundlagen werden Dir eigentlich mit jedem Buch über C++/MFC vermittelt !!! Die Details / Spezialitäten das ist der Haken an den meisten Büchern
MfG veganza