diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 9d2171b828..0b09d9ec91 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -376,7 +376,7 @@ namespace Avalonia.Win32 switch ((UnmanagedMethods.WindowsMessage)msg) { case UnmanagedMethods.WindowsMessage.WM_ACTIVATE: - var wa = (UnmanagedMethods.WindowActivate)((int)wParam & 0xffff); + var wa = (UnmanagedMethods.WindowActivate)(ToInt32(wParam) & 0xffff); switch (wa) { @@ -404,7 +404,7 @@ namespace Avalonia.Win32 return IntPtr.Zero; case UnmanagedMethods.WindowsMessage.WM_DPICHANGED: - var dpi = (int)wParam & 0xffff; + var dpi = ToInt32(wParam) & 0xffff; var newDisplayRect = (UnmanagedMethods.RECT)Marshal.PtrToStructure(lParam, typeof(UnmanagedMethods.RECT)); Position = new Point(newDisplayRect.left, newDisplayRect.top); _scaling = dpi / 96.0; @@ -417,7 +417,7 @@ namespace Avalonia.Win32 WindowsKeyboardDevice.Instance, timestamp, RawKeyEventType.KeyDown, - KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers); + KeyInterop.KeyFromVirtualKey(ToInt32(wParam)), WindowsKeyboardDevice.Instance.Modifiers); break; case UnmanagedMethods.WindowsMessage.WM_KEYUP: @@ -426,14 +426,14 @@ namespace Avalonia.Win32 WindowsKeyboardDevice.Instance, timestamp, RawKeyEventType.KeyUp, - KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers); + KeyInterop.KeyFromVirtualKey(ToInt32(wParam)), WindowsKeyboardDevice.Instance.Modifiers); break; case UnmanagedMethods.WindowsMessage.WM_CHAR: // Ignore control chars - if (wParam.ToInt32() >= 32) + if (ToInt32(wParam) >= 32) { e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, - new string((char)wParam.ToInt32(), 1)); + new string((char)ToInt32(wParam), 1)); } break; @@ -497,7 +497,7 @@ namespace Avalonia.Win32 timestamp, _owner, ScreenToClient(DipFromLParam(lParam)), - new Vector(0, ((long)wParam >> 16) / wheelDelta), GetMouseModifiers(wParam)); + new Vector(0, (ToInt32(wParam) >> 16) / wheelDelta), GetMouseModifiers(wParam)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSEHWHEEL: @@ -506,7 +506,7 @@ namespace Avalonia.Win32 timestamp, _owner, ScreenToClient(DipFromLParam(lParam)), - new Vector(-((long)wParam >> 16) / wheelDelta,0), GetMouseModifiers(wParam)); + new Vector(-(ToInt32(wParam) >> 16) / wheelDelta,0), GetMouseModifiers(wParam)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSELEAVE: @@ -556,7 +556,7 @@ namespace Avalonia.Win32 (wParam == (IntPtr)UnmanagedMethods.SizeCommand.Restored || wParam == (IntPtr)UnmanagedMethods.SizeCommand.Maximized)) { - var clientSize = new Size((int)lParam & 0xffff, (int)lParam >> 16); + var clientSize = new Size(ToInt32(lParam) & 0xffff, ToInt32(lParam) >> 16); Resized(clientSize / Scaling); } @@ -578,7 +578,7 @@ namespace Avalonia.Win32 static InputModifiers GetMouseModifiers(IntPtr wParam) { - var keys = (UnmanagedMethods.ModifierKeys)wParam.ToInt64(); + var keys = (UnmanagedMethods.ModifierKeys)ToInt32(wParam); var modifiers = WindowsKeyboardDevice.Instance.Modifiers; if (keys.HasFlag(UnmanagedMethods.ModifierKeys.MK_LBUTTON)) modifiers |= InputModifiers.LeftMouseButton; @@ -644,12 +644,12 @@ namespace Avalonia.Win32 private Point DipFromLParam(IntPtr lParam) { - return new Point((short)((int)lParam & 0xffff), (short)((int)lParam >> 16)) / Scaling; + return new Point((short)(ToInt32(lParam) & 0xffff), (short)(ToInt32(lParam) >> 16)) / Scaling; } private Point PointFromLParam(IntPtr lParam) { - return new Point((short)((int)lParam & 0xffff), (short)((int)lParam >> 16)); + return new Point((short)(ToInt32(lParam) & 0xffff), (short)(ToInt32(lParam) >> 16)); } private Point ScreenToClient(Point point) @@ -688,5 +688,12 @@ namespace Avalonia.Win32 UnmanagedMethods.PostMessage(_hwnd, (int)UnmanagedMethods.WindowsMessage.WM_SETICON, new IntPtr((int)UnmanagedMethods.Icons.ICON_BIG), nativeIcon.GetHicon()); } + + private static int ToInt32(IntPtr ptr) + { + if (IntPtr.Size == 4) return ptr.ToInt32(); + + return (int)(ptr.ToInt64() & 0xffffffff); + } } }