哪个是查找控件相对于其父窗口的位置的最佳方法?

kob*_*bik 5 c++ delphi winapi mfc dialog

至少有 2 种方法可以执行此 AFAIK。

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

和这个:

如何获取放置在 MFC 对话框中的控件的大小和位置?

    htext := GetDlgItem(hDlg, IDI_TEXT);
    GetWindowRect(htext, R);
    // (1)
    // Pt := Point(R.Left, R.Top);
    // ScreenToClient(hDlg, Pt);
    // R := Rect(Pt.X, Pt.Y, Pt.X + R.Right - R.Left, Pt.Y + R.Bottom - R.Top);
    // OR: (2)
    MapWindowPoints(0, {GetParent(htext)} hDlg, R, 2);
    FrameRect(dc, R, brush);
Run Code Online (Sandbox Code Playgroud)

哪种方法更好,为什么?该方法MapWindowPoints是否适用于多个显示器?

我所关注的主要是MapWindowPoints和多显示器,因为通过0hWndFrom将使用HWND_DESKTOP

kob*_*bik 3

由于@TLama 拒绝承认并发布答案,我将发布一个答案供他完成。(谢谢! :))


该方法最明显的问题(1) ScreenToClien是,如果对话框窗口具有样式WS_EX_LAYOUTRTL并且其内容是镜像的,则该方法会失败。

在这种情况下,方法(2) MapWindowPoints将正确返回镜像点。

除了 之外我找不到任何其他差异WS_EX_LAYOUTRTL

这两种方法都适用于多个显示器。