Hauptfenster aus DoModal-Fenster verschieben
-
Hallo
Ich habe eine Dialoganwendung. Mittels Tastendruck wird ein zweiter Dialog instanziert und angezeigt. Der neue Dialog hat dieselbe Grösse wie der Hauptdialog.
Nun möchte ich, dass sobald jemand den modalen Dialog verschiebt, dass sich der im Hintergrund befindliche Hauptdialog mitverschiebt, so dass der Benutzer nicht merkt, dass es eigentlich zwei Dialoge überlappend existieren,
Ich habe es mit der 'OnMove' Methode ausprobiert, doch das scheint nicht der richtige Ansatz zu sein.
Please help!
-
Ich denke nicht, dass es funktionieren wird. Ich denke eher, dass du das Hauptfenster erst unsichtbar machst, dann das 2. Dialog Modal anzeigst und wenn das 2. Dialog geschlossen wurde, das Hauptfenster wieder sichtbar wird.
So in der Art:
MainDlg.ShowWindow( SW_HIDE ); SecondDlg.DoModal(); MainDlg.ShowWindow( SW_SHOW );
-
Airdamn schrieb:
MainDlg.ShowWindow( SW_HIDE ); SecondDlg.DoModal(); MainDlg.ShowWindow( SW_SHOW );
Ja das dachte ich erst auch, das Problem bei dieser Methode ist aber, dass das Programm auch in der Tastliste unten verschwindet. Das darf nicht sein.
Airdamn schrieb:
Ich denke nicht, dass es funktionieren wird.
Doch es geht! Ein Arbeitskollege hat es lösen können (vielleicht ist es eine unschöne Lösung, aber es funktioniert).
Lösung:
'OnMove' wird aufgerufen, wenn der Dialog bewegt wurde. Daher:void CDlg_Sub::OnMove(int x, int y){ CDialog::OnMove(x, y); if (m_bInitDialog){ moveMainWindow(); } }
'm_bInitDialog' wird erst auf 'true' gesetzt, wenn die Initialisierung des Subdialogs (nahezu) abgeschlossen ist.
void CDlg_Sub::moveMainWindow(){ CRect rec; GetWindowRect(rec); // get position and size of visible window int recWidth = rec.Width(); // width of window int recHeigth = rec.Height(); // heigth of window int iTLX = rec.TopLeft().x; // left upper corner x value int iTLY = rec.TopLeft().y; // left upper corner y value //move & paint the Main Window at the new position m_pMainDlg->MoveWindow(iTLX, iTLY, recWidth, recHeigth, TRUE); }
'm_pMainDlg' ist Zeiger auf Hauptdialog, welcher mitgezogen werden soll.
Anmerkung: Im DebugMode verhält sich das Ganze etwas suspekt, im Release funktioniert es perfekt.