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

时间:2014-11-07 17:19:57

标签: c++ delphi winapi mfc dialog

至少有两种方法可以做这个AFAIK。

How do I find position of a Win32 control/window relative to its parent window?

和此:

How to get size and location of a control placed on a dialog in 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);

哪种方法更好,为什么?具有MapWindowPoints的方法是否适用于多个监视器?

我关注的主要是MapWindowPoints和多个监视器,因为0 hWndFromHWND_DESKTOP使用{{1}}

1 个答案:

答案 0 :(得分:3)

由于@TLama拒绝接受信用并发布回复,我将发布一个给他最终确定。 (谢谢!:))


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

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

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

这两种方法适用于多个监视器。