Konvertiert einen modalen Dialog zur Laufzeit in modal

8

Ich habe einen Dialog (CDialog abgeleitete Klasse), der auf zwei verschiedene Arten verwendet werden kann (Editiermodus und Programmiermodus).

Wenn das Dialogfeld geöffnet ist, um im Programmiermodus verwendet zu werden, ist es ein nicht modales Dialogfeld, das zum Ändern der Hauptansicht (Art einer Symbolleiste) verwendet wird. Wenn es im Bearbeitungsmodus geöffnet ist, kann der Benutzer die Konfiguration des Dialogs selbst ändern und in diesem Fall ist es ein modaler Dialog.

Im Moment sind es zwei verschiedene Dialoge mit wenigen Unterschieden und ich möchte nur einen Dialog haben und den Benutzer zwischen dem Programmiermodus und dem Editiermodus wechseln lassen, indem ich einfach eine Taste im Dialog drücke.

Also muss ich den modalen Dialog in einem modalen Dialog und umgekehrt zur Laufzeit konvertieren. Gibt es eine Möglichkeit, das zu erreichen?

Danke.

    
Javier De Pedro 04.08.2009, 06:24
quelle

3 Antworten

11

Da vielleicht jemand daran interessiert sein könnte, in Zukunft etwas Ähnliches zu tun, habe ich es so gemacht:

Ich verwende diese zwei Funktionen des Hauptrahmens: CMainFrame::BeginModalState() und CMainFrame::EndModalState() .

Das Problem mit diesen Funktionen ist dasselbe wie beim Deaktivieren des übergeordneten Fensters. Das Fenster, das modal erstellt werden soll, wird ebenfalls deaktiviert. Aber die Lösung ist einfach. Aktivieren Sie das Fenster einfach erneut, nachdem Sie BeginModalState aufgerufen haben.

%Vor%

Danke für Ihre Hilfe.

    
Javier De Pedro 06.08.2009, 09:52
quelle
2

Das geht nicht leicht , ohne den Dialog zu schließen und erneut zu öffnen. Dann können Sie ShowWindow oder DoModal entsprechend aufrufen.

    
demoncodemonkey 04.08.2009 06:43
quelle
1

Das ist nicht korrekt. Dies ist möglich, wenn Sie die Quelle von MFC betrachten, werden Sie feststellen, dass modale Dialoge technisch nicht modal sind. Sie müssen viel herumalbern, um dies richtig zu machen, aber im Grunde müssen Sie nur das Elternteil des 'modalen' Fensters deaktivieren und es wieder aktivieren, wenn das 'modale' Fenster geschlossen wird.

Ich habe das persönlich gemacht, also könnte das für Sie funktionieren, obwohl ich nicht genau weiß, was Sie zu tun versuchen.

    
adzm 04.08.2009 20:22
quelle

Tags und Links