Wie Fenster mittig setzen?
-
Hallo,
wenn ich meine Anwendung öffne, möchte ich, dass diese immer im Vordergrund ist. Hierfür verwende ich folgenden Code im OnInitDialog:
// Fenster immer im Vordergrund SetWindowPos(&CWnd::wndTop, 20, 20, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOMOVE);
Bevor ich diese Zeile eingefügt habe, hat es die Anwedung beim Öffnen immer mittig im Bildschirm angezeigt, nun hängt sie aber in der linken oberen Ecke. Gibt es eine Möglichkeit, dass die Anwendung mittig ist, ohne die entsprechenden Koordinaten einzugeben?
Gruß
Flo
-
Habe nun etwas interessantes gefunden:
// Fensterkoordinaten berechnen int posX = (GetSystemMetrics(SM_CXSCREEN) - 254)/2; int posY = (GetSystemMetrics(SM_CYSCREEN) - 86) /2; // Fenster immer im Vordergrund SetWindowPos(&CWnd::wndTop, posX, posY, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
Hier bekomme ich die Bildschirmauflösung (Größe in x- und y-Richtung) von der Funktion GetSystemMetrics(...) zurück, substrahiere die Größe meines Fensters und dividiere dies durch 2.
Allerdings sitzt das Fenster nun immer noch nicht 100 % in der Mitte. Habe ich hier vll. einen Denkfehler?
-
(Bildschirmauflösung / 2) - (Fensters /2 ) ist der XY
-
Ne ich denke das passt schon so, habe ja alles in Klammern gesetzt bevor ich dividiere.
Habe denke ich mein Problem gefunden: Die Angabe der Größe meines Dialogfensters in der Ressourcen-Ansicht von MFC scheint nicht in Pixel zu sein. Weißt du wie ich diese Einheit in Pixel umrechnen kann?
Oder gibt es eine Api..etc. Funktion, mit der ich die Größe meines Fensters ermitteln kann?
-
Naja es ging doch einfacher. Habe nun über
this->CenterWindow(0);
mein Fenster zentriert
-
Falls es dich noch interessiert...
Die andere Lösung wäreRECT rc; GetWindowRect(&rc) int posX = (GetSystemMetrics(SM_CXSCREEN) - rc.right)/2; int posY = (GetSystemMetrics(SM_CYSCREEN) - rc.bottom) /2;
CenterWindow() ist aber auch eine gute Lösung
-
RR schrieb:
CenterWindow() ist aber auch eine gute Lösung
CenterWindow ist in jedem Fall vorzuziehen, denn es berücksichtigt auch Multi-Monitor Situationen und es erlaubt ein CenterWindow über einem anderen Fenster!