据我所知,至少有两种方法可以做到这一点。
还有这个:
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
作为 hWndFrom
传递将使用 HWND_DESKTOP
。
MapWindowPoints
考虑了 RTL 读取,而ScreenToClient
没有。顺便说一句,也许你应该重新表达问题,因为有人投票将其关闭,认为它是基于观点的。 - TLamaScreenToClient
(1)会失败,而MapWindowPoints
(2)不会吗? - kobikWS_EX_LAYOUTRTL
样式,它的内容会被镜像(您可以尝试一下
)。在这种情况下,MapWindowPoints
将正确返回镜像点,而ScreenToClient
则返回一个好像没有镜像的点。这就是为什么我更喜欢使用MapWindowPoints
的原因。 - TLamaWS_EX_LAYOUTRTL
的说法是正确的。ScreenToClient
失败了。那么多个显示器呢? - kobik