ModernWPF.Internal.LegacyBorderManager.WndProc C# (CSharp) Method

WndProc() private method

Handles Win32 window messages for this window.
private WndProc ( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, bool &handled ) : IntPtr
hwnd System.IntPtr The window handle.
msg int The message ID.
wParam System.IntPtr The message's wParam value.
lParam System.IntPtr The message's lParam value.
handled bool A value that indicates whether the message was handled. Set the value to /// true if the message was handled; otherwise, false.
return System.IntPtr
        IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            IntPtr retVal = IntPtr.Zero;
            if (!handled)
            {
                var wmsg = (WindowMessage)msg;
                //Debug.WriteLine(wmsg);
                switch (wmsg)
                {
                    case WindowMessage.WM_MOUSEHWHEEL:
                        // do our own horizontal wheel event
                        var element = Mouse.DirectlyOver;
                        if (element != null)
                        {
                            var delta = wParam.ToInt32() >> 16;
                            var arg = new MouseWheelEventArgs(InputManager.Current.PrimaryMouseDevice, Environment.TickCount, delta)
                            {
                                RoutedEvent = MouseEvents.PreviewMouseHWheelEvent
                            };
                            element.RaiseEvent(arg);
                            if (!arg.Handled)
                            {
                                arg.RoutedEvent = MouseEvents.MouseHWheelEvent;
                                arg.Handled = false;
                                element.RaiseEvent(arg);

                                handled = arg.Handled;
                            }
                        }
                        break;
                    //case WindowMessage.WM_SETTEXT:
                    //case WindowMessage.WM_SETICON:
                    //    var changed = User32Ex.ModifyStyle(hwnd, WindowStyles.WS_VISIBLE, WindowStyles.WS_OVERLAPPED);
                    //    retVal = User32.DefWindowProc(hwnd, (uint)msg, wParam, lParam);
                    //    if (changed) { User32Ex.ModifyStyle(hwnd, WindowStyles.WS_OVERLAPPED, WindowStyles.WS_VISIBLE); }
                    //    handled = true;
                    //    break;
                    case WindowMessage.WM_NCUAHDRAWCAPTION:
                    case WindowMessage.WM_NCUAHDRAWFRAME:
                        // undocumented stuff for non-dwm themes that will sometimes draw old control buttons
                        handled = true;
                        break;
                    case WindowMessage.WM_NCCALCSIZE:
                        //remove non-client borders completely
                        HandleNcCalcSize(hwnd, wParam, lParam);
                        handled = true;
                        break;
                    case WindowMessage.WM_NCPAINT:
                        // prevent non-dwm flicker
                        handled = !Dwmapi.IsCompositionEnabled;
                        break;
                    case WindowMessage.WM_NCACTIVATE:
                        // handled to prevent default non-client border from showing in classic mode
                        // wParam False means draw inactive title bar (which we do nothing).

                        retVal = HandleNcActivate(hwnd, msg, wParam, retVal);
                        handled = true;
                        break;
                    case WindowMessage.WM_NCHITTEST:
                        retVal = new IntPtr((int)HandleNcHitTest(lParam.ToPoint()));
                        handled = true;
                        break;
                    case WindowMessage.WM_NCRBUTTONDOWN:
                        switch ((NcHitTest)wParam.ToInt32())
                        {
                            case NcHitTest.HTCAPTION:
                            case NcHitTest.HTSYSMENU:
                                // display sys menu
                                User32.PostMessage(hwnd, (uint)WindowMessage.WM_POPUPSYSTEMMENU, IntPtr.Zero, lParam);
                                handled = true;
                                break;
                        }
                        break;
                    case WindowMessage.WM_WINDOWPOSCHANGED:
                        HandleWindowPosChanged(hwnd, lParam);
                        break;
                    case WindowMessage.WM_DWMCOMPOSITIONCHANGED:
                        SetRegion(hwnd, 0, 0, true);
                        break;
                    case WindowMessage.WM_ERASEBKGND:
                        // prevent more flickers?
                        handled = true;
                        break;
                }
            }
            return retVal;
        }