Modal oder nichtmodal nehmen???



  • Hallo alle zusammen,
    Schon mal im voraus, Entschuldigung für mein deutsch, ich versuche mich verständlich auszudrücken...

    Ich rufe ein Dialog wo ich überprüfen möchte ob man die OK-Taste gedrückt hat, so auf:

    if (meindialog.DoModal() == IDOK)
           tue irgendwas...
    

    Wenn ich von vorne rein irgendwas verändern möchte, dann rufe ich das Dialog nicht modal auf, und zwar z.B. so:

    meindialog* ME_Dlg=new meindialog();    
        ME_Dlg->Create(IDD_DIALOG,NULL);
        CString title;
        title = "irgendwas was im Titel erscheinen soll";
        ME_Dlg->SetWindowText(title);
        ME_Dlg->m_LISTE.SetExtendedStyle( LVS_EX_FULLROWSELECT );
            ME_Dlg->m_LISTE.SetHeadings(      _T("Nr,48;Name,126;Telefon,106;Telefax,106;E-Mail,106;Info,106;") );
        ME_Dlg->m_LISTE.LoadColumnInfo();
    
        ME_Dlg->ShowWindow(SW_SHOWNORMAL);
    

    In diesem Fall wird ein titel erzeugt und ich verändere auch was in der CListCtrl...

    Soweit ist alles i.O.
    Nun, möchte ich jetzt bei einem Dialog wo ich von vornerein was verändert habe, überprüfen wann der user die OK taste drückt...

    Wie kann ich das machen???
    Kann ich bei modale Fenstern auch was verändern bevor ich es zeige?
    Oder, kann ich bei nichtmodale überprüfen ob die Ok taste betätigt worden ist...
    Und zwar, soll die Überprüfung im Dialog geschehen wo ich den zweiten aufrufe...

    Danke im voraus...



  • Hi
    "Kann ich bei modale Fenstern auch was verändern bevor ich es zeige?"
    Klar, überschreibe zum Beispiel die DoModal Funktion...

    Grüße Rapha



  • Sicher kannst du auf bei modalen Dialogen vorher was verändern - es geht nur anders.

    Für deinen Fenstertitel machst du dir eine Membervariable im Dialog. In die packst du (wie auch immer) vor dem Aufruf von DoModal deinen Titel rein. In OnInitDialog guckst du, was in der Variable drin steht und setzt das als Fenstertitel.

    Oder du baust eine Funktion, die du statt DoModal aufrufst, aber mit Parametern.
    z.B. int Show(CString strFenstertitel);
    In der kannst du die Membervariable(n) füllen und rufst dann DoModal auf.
    also:

    int CMeinDlg::Show(CString strFenstertitel)
    {
      m_strFenstertitel = strFenstertitel;
      DoModal();
    }
    

    ----------------------------------------------

    Du kannst ja im nichtmodalen Dialog in OnOK dir merken, dass eben OK gedrückt wurde (Membervariable) und dann von außen abfragen.

    Hoffe das hat dir geholfen. 🙂



  • Hallo nochmal,
    wollte nochmal etwas zu estartu_de ergänzen.

    Wenn du seine Lösung verwendest, musst du beachten, dass die OnInitDialog Funktion mit DoModal aufgerufen wird, dass also vor DoModal noch keine Steuerelemente "erstellt" wurden.

    Mach sowas also lieber nicht:

    meindialog dlg;
    dlg.m_ctlEingabefeld.ShowWindow(SW_HIDE);
    dlg.DoModal();
    

    😃

    Grüße Rapha



  • Danke schon mal an euch beide... Toll dass ihr geantwortet habt...
    Ich werde es probieren... Falls es nicht funktioniert, melde ich mich nochmal...


Log in to reply