Hauptfenster als nicht-modal erstellen
-
Hi, ich habe ein Projekt, das eine Konsolenanwendung und ein Hauptfenster enthält. Nun möchte ich, dass das Hauptfenster als modaler Dialog erstellt wird. Das Hauptfenster soll im weiteren die nichtmodale Kinderfenster bekommen. Wie soll man beim Erstellen des Hauptfensters vorgehen? Ich habe eine neue Klasse dafür erstellt. Weiter habe ich den Konstruktor erweitert:
CMeineKlasseMainWindow::CMeineKlasseMainWindow(CWnd* pParent /*=NULL*/) : CDialog(CMeineKlasseMainWindow::IDD, pParent) { //{{AFX_DATA_INIT(CMeineKlasseMainWindow) // HINWEIS: Der Klassen-Assistent fügt hier Elementinitialisierung ein //}}AFX_DATA_INIT m_pParent = pParent; }Die Member-Variable m_pParent ist vom Typ CWnd*.
Weiter habe ich den Konstruktor der App-Klasse erweitert:CMeineKlasseApp::CMeineKlasseApp() { m_pCMeineKlasseMainWindowDlg = NULL; }m_pCMeineKlasseMainWindowDlg ist ein Zeiger auf das nicht-modale C-Dialog-Objekt.
In der InitInstance() der App-Klasse habe ich folgenes hinzugefügt:if (m_pCMeineKlasseMainWindowDlg == NULL) { // Dialog-Objekt erstellen m_pCMeineKlasseMainWindowDlg = new CMeineKlasseMainWindow(); // Dialog erstellen und anzeigen m_pCMeineKlasseMainWindowDlg ->Create(CMeineKlasseMainWindow::IDD); m_pCMeineKlasseMainWindowDlg ->ShowWindow(SW_NORMAL); }Das Fenster wird zwar angezeigt, aber es verhält sich nicht normal (wenn ich andere Fenster darüber ziehe, werden diese auf meinem wie abgespiegelt), und alles ist sehr langsam. Soll ich vielleicht anders vorgehen?

Alle Fenster sollen dialogbasierend sein (keine SDI, keine MDI).
-
Wenn dein Hauptdialog modal sein soll, mußte den auch modal erstellen, sprich:
m_pCMeineKlasseMainWindowDlg = new CMeineKlasseMainWindow(); // Dialog erstellen und anzeigen m_pCMeineKlasseMainWindowDlg ->DoModal();dann kannst du alle anderen Child-Windows an dein Hauptwindow binden.
Falls ich dich falsch verstanden habe, vergiss einfach meinen Beitrag
Gruß Matthias
-
Gerade umgekehrt, Hauptdialog muss nicht-modal sein, um eine andere, zugrundeliegende Anwendung nicht blockieren. Weiß jemand, wie man einen nicht-modalen Hauptdialog erstellt?
-
Noch_Student schrieb:
Gerade umgekehrt, Hauptdialog muss nicht-modal sein, um eine andere, zugrundeliegende Anwendung nicht blockieren. Weiß jemand, wie man einen nicht-modalen Hauptdialog erstellt?
Man kann durch einen modalen Dialog keine anderen Anwendungen blockieren.
Wenn Du einen Prozess startest und dann als erstes eines modalen Dialog erzeugst, so verhält er sich gegenüber anderen Applikationen natürlich nicht "modal".
Modal bezieht sich imme rnur auf Deinen Prozess/Anwendung!
-
So ähnliches hatte ich am Anfang. Zuerst wurde mein Fenster angezeigt. Aber die andere Anwendung wurde ERST NACH dem Schließen des Fensters gestartet. Wie kann man schaffen, dass beide parallel laufen? Ich bin zur Ideee gekommen, dass mein Dialogfenster nicht-modal sein soll. Hat jemand sonst eine Idee?
Jetzt laufen beide parallel - mein Fenster und die Anwendung. Aber das Fenster lässt sich überhaupt nicht bedienen.
-
Bringst Du hier irgendwie Anwendung und Fenster durcheinander.
Das eine Anwednung eine andere blockiert kann nur dadurch entstehen, dass z.B. beide die selbe Datei exklusiv öffnen wollen oder andere Semaphoren/Mutexe etc.
-
Ich vermute mal einfach ins blaue, das er in der InitInstance den Dialog öffnet und dann ein externes Programm startet und auf die Beendigung dieses wartet. Was zur folge hat das die Messageloop der MFC nicht mehr ausgeführt wird und dadurch sein Dialog wie tot Aussieht. Hilfreich währe wenn Noch_Student mal zeigt was noch in seiner InitInstance steht, bzw. wie er die andere Anwendung startet. Dann kann man weiter sehen. Oder zu gut deutsch, da is ein Design-Fehler in seiner Anwendung, meiner Meinung nach
Gruß Matthias