Dialog - Dialogbasierendes Programm unsichtbar starten



  • Einfach statt einem modalen Dialog einen nicht-modalen Dialog nehmen

    Wer nicht weiss wie es geht:

    Am Beispiel des Projektes "Test123"

    1. In den Eigenschaften vom Dialog das Häkchen "Sichtbar" entfernen

    2. In CTest123App::InitInstance folgende Änderung vornehmen:

    Suche nach:

    CTest123Dlg dlg;
        m_pMainWnd = &dlg;
        int nResponse = dlg.DoModal();
        if (nResponse == IDOK)
        {
            // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
            //  Dialogfelds über OK zu steuern
        }
        else if (nResponse == IDCANCEL)
        {
            // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
            //  Dialogfelds über "Abbrechen" zu steuern
        }
    
        // Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
        //  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
        return FALSE;
    

    und ändere in

    CTest123Dlg* dlg=new CTest123Dlg;
        dlg->Create(IDD_TEST123_DIALOG);
        m_pMainWnd = dlg;
        dlg->ShowWindow(SW_SHOW); // Wenn das Fenster NICHT angezeigt werden soll diese Zeile weglassen
        return TRUE; // Wichtig da sonst das Nachrichtensystem nicht gestartet wird und die Anwendung sich sofort beendet
    

    3. Da wir jetzt ein nicht-Modalen Dialog haben müssen wir noch folgende Änderungen in der Dialogklasse vornehmen

    3.1 Überschreiben von OnCancel (ggf. mit OnOK genauso verfahren)

    void CTest123Dlg::OnCancel() 
    {
        DestroyWindow(); // Nicht EndDialog bzw. CDialog::OnCancel aufrufen
    }
    

    3.2 Virtuelle Funktion PostNcDestroy hinzufügen

    void CTest123Dlg::PostNcDestroy() 
    {
        PostQuitMessage(0);
        delete this;
    }
    

    Das wars schon...



  • Ich packs mal in die FAQ


Anmelden zum Antworten