Frage

Ich habe einen Dialog (CDialog abgeleitete Klasse), die auf zwei verschiedene Arten (Editiermodus und Programmiermodus) verwendet werden können.

Wenn das Dialogfeld geöffnet ist im Programmiermodus verwendet werden, es ist ein modaler Dialog dass es zum Modifizieren der Hauptansicht (eine Art einer Werkzeugleiste) verwendet wird. Wenn es geöffnet im Bearbeitungsmodus ist der Benutzer kann sich die Konfiguration des Dialogs ändern und in diesem Fall ist es ein modaler Dialog.

Im Moment sind sie zwei verschiedene Dialoge mit einigen Unterschieden, und ich möchte nur haben wollen Dialog und lassen den Benutzer Wechsel zwischen Programmiermodus und Bearbeitungsmodus per Knopf im Dialog drücken.

Also muß ich den modalen Dialog in einem modalen Dialog und umgekehrt zur Laufzeit konvertieren. Gibt es eine Möglichkeit, das achive?

Danke.

War es hilfreich?

Lösung

Wie vielleicht jemand interessiert sein könnte etwas Ähnliches in der Zukunft dabei, das ist die Art, wie ich es schließlich tat:

Ich benutze diese beiden Funktionen des Hauptrahmens. CMainFrame::BeginModalState() und CMainFrame::EndModalState()

Das Problem mit diesen Funktionen ist das gleiche, die mit dem übergeordneten Fenster zu deaktivieren. Das Fenster, das Sie machen modal wollen wird auch deaktiviert. Aber die Lösung ist einfach, nur wieder aktivieren, um das Fenster nach BeginModalState aufrufen.

void CMyDialog::MakeModal()
{
   //disable all main window descendants
   AfxGetMainWnd()->BeginModalState();

   //re-enable this window
   EnableWindow(TRUE);
}

void CMyDialog::MakeModeless()
{
   //enable all main window descendants
   AfxGetMainWnd()->EndModalState();
}

Danke für Ihre Hilfe.

Andere Tipps

Das kann nicht getan werden leicht ohne Schließen und den Dialog wieder zu öffnen. Dann können Sie Showwindow oder DoModal als angemessen bezeichnen.

Das ist nicht richtig. Dies kann geschehen, wenn man sich der MFC-Quelle sehen Sie werden erkennen, dass es modale Dialoge sind technisch nicht selbst modal. Sie werden über eine Menge Ausmisten zu tun haben, um diese Arbeit richtig zu machen, aber im Grunde müssen Sie nur noch die Eltern der ‚modal‘ Fenster deaktivieren und wieder aktivieren, wenn die ‚modal‘ Fenster geschlossen wird.

Ich habe dies getan persönlich so kann dies für Sie arbeiten, wenn ich nicht ganz sicher bin, was Sie zu tun versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top