SetWindowPos/MoveWindow
-
moin,
ich will steuerelemente eines dialogs verschieben und ihre grösse verändern. nun verhalten sich die genannten funktionen nicht ganz so wie ich das erwartet habe. im folgenden beispiel sollte der button IDC_TEST meiner meinung nach seine position beibehalten, tut es aber nicht:CRect rect; GetDlgItem(IDC_TEST)->GetWindowRect(rect); GetDlgItem(IDC_TEST)->MoveWindow(rect); GetDlgItem(IDC_TEST)->GetWindowRect(rect);
der erste aufruf von GetWindowRect liefert mir folgende koordinaten:
rect.top = 148
rect.bottom = 171
rect.left = 251
rect.right = 349der zweite aufruf (nach MoveWindow) ergibt:
rect.top = 223
rect.bottom = 246
rect.left = 254
rect.352mit
GetDlgItem(IDC_TEST)->SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_SHOWWINDOW );
erhalte ich das gleiche ergebnis.
wo ist der fehler ?
-
mit GetWindowRect bekommst du die Koordinaten des Fensters relativ zur oberen linken BILDSCHIRM Ecke,
mit Move Window setzt du die Koordinaten relativ zur obern linken Ecke des aktiven FENSTERS.Greez
-
ach so, d.h. ich muss mir noch die koordinaten des aktiven fensters holen und ein wenig rechnen. oder gibt es eine möglichkeit, die koordinaten des buttons bezogen auf die linke obere ecke des aktiven fensters zu ermitteln? noch besser wäre für meine zwecke eine funktion die einen dialog inklusive aller steuerelemente neu skaliert, aber die gibts wohl nicht.
schönen dank schon mal!
-
schau dir doch mal die Funktion
ScreenToClient(..)
an.
Greez