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 ?


  • Mod

    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) ?



  • ShowCursor()

    Wenn das Fenster maximiert/minimiert wird oder sonstwie die Größe verändert wird bekommt dein Fenster eine WM_SIZE Nachricht



  • Vielen Dank 😃


Anmelden zum Antworten