ScreenToClient() zählt rückwerts hoch
-
Abend alle zusammen,
ich bastle aktuell an einer "mini" Engine und möchte die Position meines Mauszeigers innerhalb des Fensters ermitteln. Durch googlen bin ich auf
ScreenToClient()
gestoßen, was im Prinzip genau das ist was ich suche, aber wenn ich mir die Position ausgeben lasse zählt der zurückgegebene Wert rückwärts hoch. Das Fenster erstelle ich mitCreateWindowEx()
.
-
Der Fehler liegt in Zeile 42.
-
Bevor jetzt noch Glaskugeln befragt und Tarotkarten gelegt werden, folgender Hinweis:
Zu wenig Informationen! Zeig Code, erkläre genauer.
-
Meine Glaskugel sagt mir, dass folgender Hinweis vielleicht angebracht sein könnte: Die Koordinaten, die du von den Windows Messages bekommst, sind bereits relativ zum Fenster...
-
Okay, mehr Informationen.
Hier erstelle ich das Fenster in meinem Core:
int CDX11Core::InitWindow() { WNDCLASSEX wcex = {}; wcex.cbSize = sizeof( wcex ); wcex.lpfnWndProc = WndProc; wcex.hInstance = m_wcv.hInstance; wcex.hIcon = LoadIcon( 0, IDI_APPLICATION ); wcex.hCursor = LoadCursor( 0, IDC_ARROW ); wcex.hbrBackground = (HBRUSH)GetStockObject( NULL_BRUSH ); wcex.lpszClassName = m_wcv.sWindowClass.c_str(); wcex.hIconSm = LoadIcon( 0, IDI_APPLICATION ); if( !RegisterClassEx( &wcex ) ) { MessageBox( 0, L"Registerclass failed!", 0, MB_OK ); return -1; } DWORD style = WS_OVERLAPPEDWINDOW; RECT rc = { 0, 0, m_wcv.nClientWidth, m_wcv.nClientHeight }; AdjustWindowRect( &rc, style, false ); /*HWND*/ m_hWindow = CreateWindowEx( 0, wcex.lpszClassName, m_wcv.sWindowTitle.c_str(), style, 100, 100, rc.right - rc.left, rc.bottom - rc.top, 0, 0, m_wcv.hInstance, NULL ); if( m_hWindow == 0 ) { MessageBox( 0, L"CreateWindow failed", 0, MB_OK ); return -1; } if( m_wcv.bWindowed ) { ShowWindow( m_hWindow, SW_SHOW ); } else { ShowWindow( m_hWindow, SW_MAXIMIZE ); } UpdateWindow( m_hWindow ); return 0; }
Und hier soll der Input geschehen:
void CInput::UpdateMousePos() { ScreenToClient( theDXCore->GetHWND() , &mousePosition ); } POINT CInput::GetMousePosition() { return mousePosition; }
Wenn ich jetzt
GetMousePosition
aufrufe und ausgebe erhalte ich einen riesigen negativen Wert der kontinuierlich wächst.
-
Negative Werte sind bei Client-Koordinaten durchaus möglich. Hoffentlich ist dir klar, das ScreenToClient() nur eine Konvertierung macht und nicht die Koordinaten selbst ermittelt. (-> z.B. GetCursorPos())
-
-
dot schrieb:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645616.aspx
Ah okay jetzt läuft es, danke!