Fenster nach verschieben an Ort und Stelle halten
-
Hallo Leute,

ich hab mit SetWindowPos in der MainFrame.cpp die Grösse meines Fensters geändert.
In SetWindowPos muss ich aber auch die Koordinaten meines Fensters angeben.
Die hat zur Folge dass wenn mein Fenster verschoben wird und dann über New(Im Menue)die Grösse geändert wird das Fenster wieder an die Koordinaten springt welche in SetWindowPos angegeben wurden.
Bin nätürlich gleich auf WM_Move gestossen, klappt aber auch nicht in dieser Funktion:( . Gibt es irgend ne Möglichkeit die Koordinaten meines Fensters nach dem verschieben auszulesen und sie in SetWindowpos neu zu setzen sodass das Fenster nach der Grössenänderung an der Stelle bleibt an die es verschoben wurde ?
Danke für eure Hilfe

ShadowEater
-
Ja, gibt es - die entsprechende Funktion nennt sich GetWindowPlacement() oder GetWindowRect().
-
Mach dir ein CRect oder CPoint als Member. Initial steckst du die gewünschte Fensterposition rein.
Und nach dem Bewegen holst du dir da rein die Koordinaten mit GetWindowRect und merkst die da drin. (Kann sein, dass du noch mit ClientToScreen umrechnen musst, das teste ich immer einfach erstmal.)Dadurch springt er danach nicht mehr, weil er immer die letzte obere linke Ecke weiß.
(Ich hoffe, ich hab dich richtig verstanden.)
-
Hi ;),
hab mir ein CRect Objekt gemacht un mit GetWindowRect die Koordinaten geholt.
void CAaaaaaaaaaaView::OnFileNew() { CRect rc; GetWindowRect (&rc); CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd(); pFrame->SetWindowPos (&CWnd::wndTop, rc.left, rc.top, 200, 400 ,SWP_NOREPOSITION); }Kann jetzt das Fenster verschieben, beim ausführen wird es auch nicht mehr zurückgesetzt !
Aber jedesmal wenn ich OnFileNew()ausführe wird das Fenster einigev Pixel weiter nach unten versetzt.
In BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) hab ich natürlich nichts angegeben !
Gibts da irgend nen Windows Automatismus den ich noch deaktivieren muss ?regards
ShadowEaterP.S: Hi estartu, ja, Du hasts vollkommen erfasst

-
Wie estartu schon sagte:
estartu schrieb:
(Kann sein, dass du noch mit ClientToScreen umrechnen musst, das teste ich immer einfach erstmal.)
-
Hi,
bei Benutzung von ClienttoScreen springt das Fenster noch mehr als ohne !
Hier mal mein Code:void CTestView::OnFileNew() { CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd(); CRect rc; GetWindowRect (&rc); // ClientToScreen (&rc); pFrame->SetWindowPos (&CWnd::wndTop, rc.left, rc.top, 200, 400 ,SWP_NOREPOSITION); }
ShadowEater
-
Habs nochmal so probiert :
void CAaaaaaaaaaaView::OnFileNew() { CRect rc; GetWindowRect (&rc); CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd(); CClientDC dc(this); dc.SetMapMode (MM_ANISOTROPIC); dc.LPtoDP (&rc); pFrame->SetWindowPos (&CWnd::wndTop, rc.left, rc.top, 200, 100 ,SWP_NOREPOSITION); }funzt aber auch net !

Shadoweater
-
AAAAAAAAAHHHHHRRGGGGGGGGGGHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!
SWP_NOMOVE
Retains the current position (ignores X and Y parameters).Falls es noch jemand interessiert !

ShadowEater