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 hierzu 🙄

    Ich 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!



  • @Chris1986

    Etwas ausführlicher steht das auch noch mal hier beschrieben.

    MfG veganza



  • 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 OK

    Dann 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();
    }
    


  • @Chris1986

    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 includieren

    Was 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 kaufen 😉

    Euer
    Chris



  • @Chris1986

    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


Anmelden zum Antworten