private void CompletionWindowOnWndProcMessage(ref Message m, HandledEventArgs args) { WindowMessage msg = m; // Ensure that dialog keys get sent to the window if (msg.Is(WindowMessageType.WM_GETDLGCODE)) { switch (msg.WParamInt64Value) { case VirtualKey.VK_TAB: case VirtualKey.VK_RETURN: case VirtualKey.VK_ESCAPE: case VirtualKey.VK_SPACE: case VirtualKey.VK_LEFT: case VirtualKey.VK_UP: case VirtualKey.VK_RIGHT: case VirtualKey.VK_DOWN: { // Tell Windows that we want to receive WM_KEYDOWN messages for dialog keys when the scrollbar is focused. // ElementHost.EnableModelessKeyboardInterop() already handles this when all other elements are focused, // but for some reason if the user clicks on the scrollbar or scrolls with the mouse wheel // WM_KEYDOWN messages don't get sent. args.Handled = true; m.Result = new IntPtr(DialogCode.DLGC_WANTMESSAGE); return; } } } // Ensure that focus is always on something that is listening for keyboard input if (msg.Is(WindowMessageType.WM_MOUSEWHEEL)) { _mouseWheelThrottle.Reset(); } if (msg.Is(WindowMessageType.WM_LBUTTONDOWN) || msg.Is(WindowMessageType.WM_MBUTTONDOWN) || msg.Is(WindowMessageType.WM_RBUTTONDOWN)) { _editor.Focus(); return; } if (msg.Is(WindowMessageType.WM_LBUTTONUP) || msg.Is(WindowMessageType.WM_MBUTTONUP) || msg.Is(WindowMessageType.WM_RBUTTONUP)) { _editor.Focus(); return; } }