Dialog in Buttonbehandlungsroutine verscheiben.
-
Hallo zusammen.
Ich habe einen Button auf einem Dialog, welcher beim Klicken die x-Position des Dialogs um einen bestimmten Wert ändern soll.
Bin noch sehr unerfahren mit MFC, aber habe es mal so versucht
void CKeyboardQWER::OnBnClickedButtonMoveKeybLeft() { LPRECT lRect; LONG x; LONG y; GetWindowRect(lRect); // Alternativ habe ich auch GetClientRect(lRect); versucht... x = lRect->left - 179; y = lRect->top; SetWindowPos(&CWnd::wndTop, x, y, 0, 0, SWP_NOSIZE); }
Nun habe ich gleich drei Probleme auf einmal
Zum ersten bekomme ich die Warnung 'warning C4700: Die nicht initialisierte lokale Variable "lRect" wurde verwendet.'
Ist mir schon klar, dass lRect nicht initialisiert ist, aber das muss doch auch nicht, weil lRect ja als Out Paramter von GetxxxRect verwendet wird, oder!?Zweitens liefern mir die GetxxxRect Funktionen für left, top, right und bottom immer 0, was nicht mit meinem Dialog übereinstimmt. Sind das überhaupt die richtigen Funktionen für diesen Zweck bzw. verwende ich sie richtig?
Drittens: Wenn ich mal einfach ignoriere dass lRect->left == 0 ist, scheint die Routine beim Zugriff auf das Feld abzubrechen.
Sprich: ich kann bis zu der Zeile x = lRect->left - 179; durchsteppen und wenn ich dann einmal weitersteppe passiert nichts. Die Funktion scheint beendet zu sein.Leider konnte mir Tante Google bei meinen Problemen nicht wirklich weiterhelfen.
Was mache ich falsch?
Schon mal vielen Dank.
-
Was du falsch machst, ganz grundsätzliche Sachen die einentlich die Grundlagen der Programierung sind.
Du erstellst eine Variable LPRECT lRect die du nicht initialisierst, also zeigt die irgendwo hin (was dir schon der Compiler sagt). Diese übergibst du dann auch noch an GetWindowRect(), da sollte es eigentlich schon knallen, weil der irgendwo in den Speicher schreibt wo der gar nicht hin schreiben darf.
Also richtiger ist das so:
void CKeyboardQWER::OnBnClickedButtonMoveKeybLeft() { CRect rect; LONG x; LONG y; GetWindowRect(&rect); // Alternativ habe ich auch GetClientRect(lRect); versucht... rect.InflateRect(179,0,0,0); SetWindowPos(&CWnd::wndTop, rect.left, rect.top, 0, 0, SWP_NOSIZE); }
so sollte das gehen ohne das jetzt ausprobiert zu haben