diff --git a/src/Windows/Perspex.Win32/WindowImpl.cs b/src/Windows/Perspex.Win32/WindowImpl.cs index 4bb3316f64..197f178fd8 100644 --- a/src/Windows/Perspex.Win32/WindowImpl.cs +++ b/src/Windows/Perspex.Win32/WindowImpl.cs @@ -1,4 +1,4 @@ -// Copyright (c) The Perspex Project. All rights reserved. +// Copyright (c) The Perspex Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. using Perspex.Input; @@ -306,10 +306,21 @@ namespace Perspex.Win32 } break; - + case UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_NCMBUTTONDOWN: + e = new RawMouseEventArgs( + WindowsMouseDevice.Instance, + timestamp, + _owner, + msg == (int)UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN + ? RawMouseEventType.LeftButtonDown + : msg == (int)UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN + ? RawMouseEventType.RightButtonDown + : RawMouseEventType.MiddleButtonDown, + new Point(0, 0), GetMouseModifiers(wParam)); + break; case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_RBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_MBUTTONDOWN: @@ -324,7 +335,7 @@ namespace Perspex.Win32 : RawMouseEventType.MiddleButtonDown, new Point((uint) lParam & 0xffff, (uint) lParam >> 16), GetMouseModifiers(wParam)); break; - + case UnmanagedMethods.WindowsMessage.WM_LBUTTONUP: case UnmanagedMethods.WindowsMessage.WM_RBUTTONUP: case UnmanagedMethods.WindowsMessage.WM_MBUTTONUP: @@ -410,6 +421,10 @@ namespace Perspex.Win32 if (e != null && Input != null) { Input(e); + + if (msg >= 161 && msg <= 173) + return UnmanagedMethods.DefWindowProc(hWnd, msg, wParam, lParam); + return IntPtr.Zero; }