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

Anmelden zum Antworten