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