调用 PointToScreen vs CompositionTarget.TransformToDevice 时的不同
本文关键字:TransformToDevice PointToScreen vs CompositionTarget 调用 | 更新日期: 2023-09-27 18:36:09
我有一个位于主屏幕(也是唯一屏幕)左上角的 WPF 窗口。我想将窗口中的点 (0,0) 转换为屏幕坐标。我相信以下两个调用应该给我相同的结果:
1. 这导致 (8,8)...
window.PointToScreen(new Point(0,0));
2. 这会导致 (0,0)...
PresentationSource.FromVisual(window).CompositionTarget.TransformToDevice.Transform(new Point(0,0));
为什么?
8 像素的差异表明,第一次调用认为窗口坐标系在边框之后启动,而第二次调用将窗口视为一个整体,包括非工作区(调整边框大小和工具栏)。这是真的吗?
(编辑以删除有关DPI设置的多余细节)
你知道客户区,对吧?
如果您想找出孩子的位置,将窗口的位置(0,0)放入位置,则第一次调用很有用,它将是客户端区域内的一个点。窗口边框(不与Border
混淆)不是客户端区域。
在我看来,第二个调用是窗口本身的坐标(包括边框)。