Dialog zentrieren Problem
-
hi
ich erzeuge eine non-modale Dialogbox mit
m_hWnd = CreateDialogParam(hInstance,MAKEINTRESOURCE(m_lpTemplate) ,m_hWndParent,(DLGPROC)(DialogProc), (LPARAM)Data); ShowWindow(m_hWnd,SW_SHOWNORMAL);Das Problem ist, die Abmessungen der Dialogbox zu erfahren
(entweder nach Showwindow oder in WM_INITDIALOG)RECT lpRect; //memset(&lpRect,0,sizeof(RECT)); GetWindowRect(m_hWnd,&lpRect);Der Sinn der Sache ist, die Dialogbox in die Mitte des Bildschirms zu bringen.
Dies funktioniert auch wunderbar wenn ich eine modale Dialogbox mit DialogBoxParam erstelle.
Die Dialogbox wird jedesmal viel zu groß dargestellt (lpRect ist irgendwie willkürlich).
Habe herausgefunden, dass wenn man im Aufruf "CreateDialogParam" den Parameter m_hwndParent auf 0 setzt, wegglässt, dann funktioniert das zentrieren.
Allerdings zeigt m_hWndParent 100% auf ein anderes eigenes Fenster.woran kann das liegen?
THXZentrieren :
... { RECT lpRect; memset(&lpRect,0,sizeof(RECT)); GetWindowRect(m_hWnd,&lpRect); <<-- hier gibts unsinniges lpRect lpRect.left = (GetSystemMetrics(SM_CXSCREEN) / 2) - (lpRect.right / 2); lpRect.top = (GetSystemMetrics(SM_CYSCREEN) / 2) - (lpRect.bottom / 2); ::MoveWindow(m_hWnd,lpRect.left,lpRect.top,lpRect.right,lpRect.bottom,FALSE); }
-
benutz mal die forensuche --> CenterWindow
dann wirst du eine funktion von WebFritzi und eine von mir findenauch noch ein paar infos
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/usingdialogboxes.asp
-
Dann könntest dem Dialog Box Template auch den Style DS_CENTER geben und er wird automatisch zentriert.
-
hi,
erstmal danke für Eure Hilfe!
Die MS Site hab ich in der MSDN Form gelesen. Allerdings sind dort alle Quelltextbeispiele über Javascript ersteinmal geschlossen - d.h. man muss sich gezielt anklicken. Dabei ist mir wohl das Beispiel mit SetWindowspos entgangen.
Das nutze ich nun etwas abgewandelt.Es ist eben merkwürdig, dass damit nun funktioniert, obwohl mein eigener Quelltext auch funktioniert, aber eben nicht immer.
DS_CENTER ist eine gute Idee, leider benutze ich eine Klassen, die die Zentrierung bereitstellen muss, und da sollen nicht alle Dialoge zentriert sein.
Abgesehen davon :
Wie kann man denn, den Style DS_CENTER ändern? Müsste doch mit SetWindowLong gehen oder?