CRect und MoveWindow



  • Hallo zusammen.

    Habe einen Dialog in meiner Applikation den ich gerne beim Start oben links in der Ecke anzeigen will. Wenn der Dialog verschoben wird sollte dieser beim nächsten mal wieder an der selben Stelle angezeigt werden. Habe aber ein Problem wie ich den Dialog am Anfang in die linke obere Eke bekomme. Das mit dem speichern und wieder an der selben Stelle anzeigen geht aber.

    Hier mal mein Code:

    App Klasse:

    CRect m_dlgpos;
    
    CMyApp::CMyApp()
    {
      // Variante 1 -> hier wir der Dialog gar nicht angezeigt
      m_dlgpos.top = 20;
      m_dlgpos.right = 20;
    
      // Variante 2 ->  hier verändert sich die Größe
      m_dlgpos.bottom = 204;
      m_dlgpos.right = 548;
    }
    

    Dialog Klasse:

    BOOL CMyDialog::OnInitDialog()
    {
        //...
        // Dialog positionieren
         MoveWindow(theApp.m_dlgpos);
        //...
    }
    
    void CMyDialog::OnDestroy()
    {
       GetWindowRect(theApp.m_dlgpos);
    
       // Position speichern
       CDialog::OnDestroy();
    }
    

    Was ist denn da falsch. Was muss ich als Startwert setzen dass der Dialog links oben angezeigt wird.



  • hier muss es natürlich left heißen

    // Variante 1 -> hier wir der Dialog gar nicht angezeigt
      m_dlgpos.top = 20;
      m_dlgpos.left= 20;
    

  • Mod

    Logisch weil bottom right 0 sind, das ergibt eine negative Größe und das geht eben nicht.



  • Hallo

    Danke für die Antwort. Ja das habe ich inzwischen auch rausgefunden. Dass man da alle 4 Werte angeben muss.

    Aber was gibt es denn da für eine einfache Lösung.

    Es gibt SetWindowRect und GetWindowRect. Damit kann ich die Position des Dialogs speichern und später neu setzen.

    Doch für den Startup ist das nichts. Da brauche ich dann noch SetWindowPos. Und GetWindowPos gibt es ja nicht.

    Habe das nun wie folgt gelöst. Was einfacheres gibts da nicht?

    if( theApp.m_dlgpos.bottom == 0 )
       SetWindowPos(NULL,20,220,0,0,SWP_NOSIZE|SWP_NOZORDER);
    else
       MoveWindow(theApp.m_dlgpos);
    

  • Mod

    Benutze doch nur SetWindowPos...
    Oder befülle die Daten vor mit den Werten aus GetWindowRect...



  • Benutze doch nur SetWindowPos...

    Ah ok und für x nehme ich dann aus CRect das left und für y top.


  • Mod

    Jupp.



  • Gut.

    Und aus diesem Grund gibt es auch kein GetWindowPos(). Sonst wäre die Funktion ja redundant. Oder obwohl, es gibt sicher auch bei MFC Funktionen die redundant sind. Oder etwa nicht?


Anmelden zum Antworten