Punkt in fenstereigenes Koordinatensystem umrechnen
-
Hallo!
Ich definiere für mein Fenster ein eigenes Koordinatensystem:
SetMapMode(hdc, MM_ISOTROPIC); SetWindowExtEx(hdc, 100, 100, NULL); SetViewportExtEx(hdc, (rect.right)/2, (-rect.bottom)/2, NULL); SetViewportOrgEx(hdc, (rect.right)/2, (rect.bottom)/2, NULL);
Anschließend ermittle ich die Position der Maus und rechne diese Koordinaten auf Fensterkoordinaten um:
GetCursorPos(&pt); ScreenToClient(hWnd, &pt);
Wie kann ich diese Koordinaten nun aber auf das Koordinatensystem umrechnen, dessen Mittelpunkt in der Mitte des Fenster liegt (SetViewportOrgEx()) ? Ich meine, beim Zeichnen von Text und Punkten (Reaktion auf WM_PAINT) wird es auch angewendet. Dann müsste das doch theoretisch auch möglich sein.
-
Hi,
ich hab ein Beispiel, wie du die Koordinaten von deinem Fenster aurechnen kannst:// middle = Mittelpunkt des Fensters POINT middle; // point = Mausposition POINT point; RECT rect; GetWindowRect(hwnd,&rect); GetCursorPos(&point); point.x = point.x-rect.left; point.y = point.y-rect.top; middle.x = rect.left+(rect.right/2); middle.y = rect.top+(rect.bottom/2);
Den Rest, kannst du ja in deine Funktion reinbasteln
-
Okay: man könnte die Cursorkoordinaten über eine Funktion umrechnen. Ich wollte es mir aber nicht so kompliziert machen und hatte gedacht, dass es dafür gleich eine Windows-Funktion gibt, mit der man Punkte auf andere Koordinatensysteme umrechnen kann... so wie man sich die Screenkoordinaten des Cursors per ScreenToClient() auf Fensterkoordinaten umrechnen kann.
-
Die Funktion, die du suchst lautet DPtoLP.
Umgekehrt gehts mit LPtoDP; aber das wird seltener gebraucht.
-
Danke cd9000! Das war die Funktion, die ich gesucht habe.
DPtoLP(hdc, &pt, 1);