gpt4 book ai didi

winapi - 如何找到 Win32 控件/窗口相对于其父窗口的位置?

转载 作者:行者123 更新时间:2023-12-01 19:47:22 64 4
gpt4 key购买 nike

给定 Win32 窗口的句柄,我需要找到它相对于其父窗口的位置。

我知道几个函数(例如 GetWindowRect()GetClientRect() ),但它们都没有明确返回所需的坐标。

我该怎么做?

最佳答案

解决方案是结合使用 GetWindowRect()MapWindowPoints() .

GetWindowRect() 检索窗口相对于您在显示器上看到的整个屏幕区域的坐标。我们需要将这些绝对坐标转换为主窗口区域的相对坐标。 MapWindowPoints() 将相对于一个窗口给出的坐标转换为相对于另一个窗口的坐标。因此,我们需要屏幕区域的“句柄”以及我们试图查找其坐标的控件的父窗口的句柄。屏幕是 Windows 术语中的“窗口”,称为“桌面”。我们可以通过WinUser.h中定义的常量HWND_DESKTOP来访问Desktop的句柄(包含Windows.h就足够了)。我们只需调用Win32函数GetParent()即可获取父窗口的句柄。 。现在我们有了调用 MapWindowPoints() 函数所需的所有参数。

RECT YourClass::GetLocalCoordinates(HWND hWnd) const
{
RECT Rect;
GetWindowRect(hWnd, &Rect);
MapWindowPoints(HWND_DESKTOP, GetParent(hWnd), (LPPOINT) &Rect, 2);
return Rect;
}

MapWindowPoints() 定义为:

int MapWindowPoints(
_In_ HWND hWndFrom,
_In_ HWND hWndTo,
_Inout_ LPPOINT lpPoints,
_In_ UINT cPoints
);

MapWindowPoints() 将坐标从 hWndFrom 相对变换为 hWndTo。在我们的例子中,我们执行从桌面 (HWND_DESKTOP) 到父窗口 (GetParent(hWnd)) 的转换。因此,生成的 RECT 结构保存子窗口 (hWnd) 相对于其父窗口的相对坐标。

关于winapi - 如何找到 Win32 控件/窗口相对于其父窗口的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034975/

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