Ich möchte Code schreiben können wie folgt aus:Wie bekomme ich die Position eines Steuerelements relativ zum Client rect des Fensters?
HWND hwnd = <the hwnd of a button in a window>;
int positionX;
int positionY;
GetWindowPos(hwnd, &positionX, &positionY);
SetWindowPos(hwnd, 0, positionX, positionY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
Und haben sie nichts tun. Allerdings kann ich nicht ausrechnen, wie eine GetWindowPos()
Funktion zu schreiben, die ich Antworten in den richtigen Einheiten gibt:
void GetWindowPos(HWND hWnd, int *x, int *y)
{
HWND hWndParent = GetParent(hWnd);
RECT parentScreenRect;
RECT itemScreenRect;
GetWindowRect(hWndParent, &parentScreenRect);
GetWindowRect(hWnd, &itemScreenRect);
(*x) = itemScreenRect.left - parentScreenRect.left;
(*y) = itemScreenRect.top - parentScreenRect.top;
}
Wenn ich diese Funktion verwenden, ich Koordinaten erhalten, die bezüglich des oberen linke Ecke der Mutter Fenster, aber SetWindowPos()
will Koordinaten relativ zum Bereich unterhalb der Titelleiste (ich nehme an, dies ist der "Client-Bereich", aber die Win32-Terminologie ist alles ein bisschen neu für mich).
Lösung Dies ist die Arbeits GetWindowPos()
Funktion (dank Sergius):
void GetWindowPos(HWND hWnd, int *x, int *y)
{
HWND hWndParent = GetParent(hWnd);
POINT p = {0};
MapWindowPoints(hWnd, hWndParent, &p, 1);
(*x) = p.x;
(*y) = p.y;
}
Ist es ein Fenster Anwendung –
Wie funktioniert es, was ist die Verwendung von DirectX. Anfänger in directx. Ich habe meine eigene Funktion, dies zu tun –
Ja, es ist eine Windows-Anwendung, daher die Verwendung von Win32 API. – Andy