From 0f3be1e1ba276d7869f5d15f7c3344a087397e2c Mon Sep 17 00:00:00 2001 From: Shaojun Li Date: Mon, 4 Dec 2023 17:51:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E5=90=AF=20WM=5FPoi?= =?UTF-8?q?nter=20=E5=90=8E=EF=BC=8C=E9=9D=9E=E4=B8=BB=E5=B1=8F=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=9A=84=20GetTouchPoint/GetStylusPoint=20=E5=9D=90?= =?UTF-8?q?=E6=A0=87=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InterOp/HwndPointerInputProvider.cs | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/InterOp/HwndPointerInputProvider.cs b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/InterOp/HwndPointerInputProvider.cs index 1be44475d3b..dae149f5407 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/InterOp/HwndPointerInputProvider.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/InterOp/HwndPointerInputProvider.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. - + using MS.Internal; using MS.Internal.Interop; using MS.Internal.PresentationCore; @@ -223,7 +223,7 @@ private bool ProcessMessage(uint pointerId, RawStylusActions action, int timesta if (data.IsValid && (data.Info.pointerType == UnsafeNativeMethods.POINTER_INPUT_TYPE.PT_TOUCH || data.Info.pointerType == UnsafeNativeMethods.POINTER_INPUT_TYPE.PT_PEN)) - { + { uint cursorId = 0; if (UnsafeNativeMethods.GetPointerCursorId(pointerId, ref cursorId)) @@ -236,7 +236,7 @@ private bool ProcessMessage(uint pointerId, RawStylusActions action, int timesta { return false; } - + // Convert move to InAirMove if applicable if (action == RawStylusActions.Move && (!data.Info.pointerFlags.HasFlag(UnsafeNativeMethods.POINTER_FLAGS.POINTER_FLAG_INCONTACT) @@ -325,7 +325,20 @@ private bool ProcessMessage(uint pointerId, RawStylusActions action, int timesta /// The Y offset in logical coordiantes private void GetOriginOffsetsLogical(out int originOffsetX, out int originOffsetY) { - Point originScreenCoord = _source.Value.RootVisual.PointToScreen(new Point(0, 0)); + Point originScreenCoord = new Point(); + + HwndSource hwndSource = PresentationSource.FromVisual(_source.Value.RootVisual) as HwndSource; + if (hwndSource != null) + { + HandleRef handleRef = new HandleRef(hwndSource, hwndSource.CriticalHandle); + + MS.Win32.NativeMethods.POINT point = new MS.Win32.NativeMethods.POINT(); + MS.Win32.UnsafeNativeMethods.ClientToScreen(handleRef, ref point); + + var displayRect = _currentTabletDevice.DeviceInfo.DisplayRect; + + originScreenCoord = new Point(point.x - displayRect.left, point.y - displayRect.top); + } // Use the inverse of our logical tablet to screen matrix to generate tablet coords MatrixTransform screenToTablet = new MatrixTransform(_currentTabletDevice.TabletToScreen);