Fensterposition
-
Hi, ich will die Fensterposition (x und y) aus einem mit WinAPI erstellten Fenster rausfinden.
Das Problem ist, das die Position verzerrt wird, wenn ich die Breite/Höhe ändere und das Fenster noch verschiebe:
WINDOWPLACEMENT place; GetWindowPlacement(g_window->hWnd,&place); RECT rect; if(GetClientRect(g_window->hWnd,&rect)) { glTranslated((point.x-4- place.rcNormalPosition.left)/(float(rect.right )/640),480-((point.y-3-place.rcNormalPosition.top)/(float(rect.bottom)/480)) ,0); }Im Vollbildmodus sollte es eigentlich auch gehen...
Könnt ihr mir helfen ?
-
GetWindowRect!
-
"GetClientRect" macht doch das selbe...
Ich weiß nur nicht, wie ich die "gezerrten" Koordinaten auf normale Fensterkoordinaten runterrechne, also wo die Maus halt wirklich ist.
-
void setwintomid(HWND hWnd) { int width,height,wndwidth,wndheight; RECT sizeofwnd; width=GetSystemMetrics(SM_CXSCREEN); height=GetSystemMetrics(SM_CYSCREEN); GetWindowRect(hWnd,&sizeofwnd); wndwidth=sizeofwnd.right-sizeofwnd.left; wndheight=sizeofwnd.bottom-sizeofwnd.top; SetWindowPos(hWnd,HWND_TOP,(width-wndwidth)/2,(height-wndheight)/2,0,0,SWP_NOSIZE|SWP_SHOWWINDOW); }EDIT: Code ein wenig geändert
-
Was genau macht das ?
Ich will nur, dass egal wo mein Fenster ist, wo die Maus ist ein Bild gezeichnet ist (nur wenn die Maus im Fenster ist
)
-
(Der Code wird vermutlich das Fenster zu zentrieren)
Die Fensterposition wird normalerweise (wie schon geschrieben wurde) mittels
GetWindowRect() ermittelt:RECT rt; GetWindowRect(hWnd,&rt); // rt.left + rt.top enthalten nun die linke obere Ecke des Fensters bzgl. dem Desktop // rt.right + rt.bottom enthalten nun die rechte untere Ecke des Fenster bzgl. dem Desktop // Die Breite des Fensters kann sich über die Differenz von rt.right und rt.left berechnen...GetClientRect() dagegen liefert die Höhe und Breite der Client-Area des Fensters.
(Non-Client-Area ist Fensterrahmen, Titelleiste, Schließen-Button, etc. - Client-Area ist quasi der eigentliche Fensterinhalt)Die Position der Client-Area deines Fensters kann man über ClientToScreen() in Desktop-Koordinaten umrechnen.
Mit OpenGL kenne ich mich zwar nicht wirklich aus, aber müsste man bei der Umrechnung da nicht Viewport, Projektionsmatrix etc. berücksichtigen?
-
Mit OpenGL kenne ich mich zwar nicht wirklich aus, aber müsste man bei der Umrechnung da nicht Viewport, Projektionsmatrix etc. berücksichtigen?
Natürlich...

Danke, jetzt geht's als Fenster.
Wenn ich allerdings auf Maximieren klicke, werden scheinbar die Koordinaten beibehalten...
Wie kann ich prüfen ob das Fenster maximiert ist ?Und wie schaffe ich es eigentlich, dass die Maus immer versteckt wird, wenn sie über meinem Fenster ist (und das Fenster den Fokus hat) ?
-
Wenn das Fenster maximiert/minimiert wird oder sonstwie die Größe verändert wird bekommt dein Fenster eine WM_SIZE Nachricht
-
Vielen Dank
