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.


Anmelden zum Antworten