kickerxy123
Erfahrenes Mitglied
Guten Tag zusammen!
folgendes Problem besteht derzeit: Ich möchte die Mauskoordinaten abfragen und damit prüfen, ob die Maus auf einem (von mir definierten DirectX-) Element liegt (Boundary Check). Soweit kein Thema, wie folgt sieht es aus:
Das funktioniert, solange mein Spiel im Vollbildmodus ist, einwandfrei. Im Windowmode tauchen Probleme (logischerweise) auf, da die Mauskoordinaten nicht relativ zur Fensterecke sind, sondern global. Als Lösung habe ich folgendes versucht:
leider macht die ScreenToClient Funktion gar nichts?
Alternativ hatte ich auch schon folgendes versucht:
Als Näherung nicht schlecht, aber passt auch nicht ganz (die Y-Komponente)... habe ich doch einen anderen Rahmen? Das Fenster wird so "erzeugt":
Habt ihr Vorschläge? (Außer DirectInput verwenden, was nicht mal mehr Microsoft empfiehlt).
Danke wie immer und viele Grüße
kickerxy
folgendes Problem besteht derzeit: Ich möchte die Mauskoordinaten abfragen und damit prüfen, ob die Maus auf einem (von mir definierten DirectX-) Element liegt (Boundary Check). Soweit kein Thema, wie folgt sieht es aus:
C++:
DWORD r = GetMessagePos();
if(pos.x < ... && pos.y < ... etc) {...}
Das funktioniert, solange mein Spiel im Vollbildmodus ist, einwandfrei. Im Windowmode tauchen Probleme (logischerweise) auf, da die Mauskoordinaten nicht relativ zur Fensterecke sind, sondern global. Als Lösung habe ich folgendes versucht:
C++:
DWORD r = GetMessagePos();
pos = MAKEPOINTS(r);
if(!ScreenToClient(g_hwnd, (POINT*)&pos)){...}
leider macht die ScreenToClient Funktion gar nichts?
Alternativ hatte ich auch schon folgendes versucht:
C++:
short getWindowLeftFrameWidth(void)
{
return (SET.STG_FULLSCREEN) ? 0 : GetSystemMetrics(SM_CXBORDER);
}
short getWindowTopFrameHeight(void)
{
return (SET.STG_FULLSCREEN) ? 0 : //GetSystemMetrics(SM_CYCAPTION) +
GetSystemMetrics(SM_CYBORDER) + GetSystemMetrics(SM_CYMENU);
}
Als Näherung nicht schlecht, aber passt auch nicht ganz (die Y-Komponente)... habe ich doch einen anderen Rahmen? Das Fenster wird so "erzeugt":
C++:
if(SET.STG_FULLSCREEN)
{
SET.SCREEN_WIDTH = GetSystemMetrics(SM_CXSCREEN);
SET.SCREEN_HEIGHT = GetSystemMetrics(SM_CYSCREEN);
SetWindowLongPtr(g_hwnd,GWL_STYLE,WS_VISIBLE |WS_POPUP| WS_EX_TOPMOST);
}
else
{
SET.SCREEN_WIDTH = GetSystemMetrics(SM_CXSCREEN)/3*2;
SET.SCREEN_HEIGHT = GetSystemMetrics(SM_CYSCREEN)/3*2;
SetWindowLongPtr(g_hwnd,GWL_STYLE,WS_VISIBLE |WS_OVERLAPPEDWINDOW);
}
Habt ihr Vorschläge? (Außer DirectInput verwenden, was nicht mal mehr Microsoft empfiehlt).
Danke wie immer und viele Grüße
kickerxy
Zuletzt bearbeitet: