gpt4 book ai didi

c++ - 如何获取控件相对于窗口客户端矩形的位置?

转载 作者:IT老高 更新时间:2023-10-28 22:20:32 33 4
gpt4 key购买 nike

我希望能够编写这样的代码:

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

让它什么都不做。但是,我不知道如何编写一个 GetWindowPos() 函数以正确的单位给出答案:

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

如果我使用这个函数,我会得到相对于父窗口左上角的坐标,但是 SetWindowPos() 想要相对于标题栏下方区域的坐标(我是假设这是“客户区”,但 win32 术语对我来说有点新)。

解决方案这是有效的 GetWindowPos() 函数(感谢 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;
}

最佳答案

尝试使用GetClientRect获取坐标,使用MapWindowPoints进行变换。

关于c++ - 如何获取控件相对于窗口客户端矩形的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1950993/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com