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;
-
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);
-
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.
-
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?