WPF-контроль, встроенный в Outlook, пропускает нажатие клавиш backspace и space - PullRequest
0 голосов
/ 11 июня 2018

Я встраиваю элемент управления WPF в панель чтения Outlook, используя этот пример: https://code.msdn.microsoft.com/windowsdesktop/Creating-Adjacent-Windows-00090e4a

, но в C #.

Стили окон, которые я использую

    _hwndSource = new HwndSource(0,
        (int) (WindowStyles.WS_CHILD | WindowStyles.WS_VISIBLE | WindowStyles.WS_TABSTOP | 
               WindowStyles.WS_CLIPCHILDREN),
        (int)WindowStylesEx.WS_EX_CONTROLPARENT, 
        0, 0,
        TopPaneWindowClass, hWndParent);

    View.Loaded += _view_Loaded;
    _hwndSource.RootVisual = View;
    _hwndSource.SizeToContent = SizeToContent.Height;

Работаетхорошо, за исключением того, что текстовые поля внутри моего элемента управления пропускают некоторые ключи (SPACE и BACKSPACE) - вместо этого они переводятся в почтовый список outlook (в SPACE он переходит к следующему пункту).Я попытался добавить хук к HwndSource и обработать WM_GETDLGCODE:

_hwndSource.AddHook(ChildHwndSourceHook);

Но он не получает это сообщение.Он получает сообщения WM_KEYDOWN и WM_KEYUP.Но как я могу правильно передать его на мой контроль WPF?Кроме того, я могу видеть WM_SETFOCUS, WM_GETOBJECT, WM_NCHITTEST, WM_SETCURSOR и некоторые сообщения с кодом C131.

Редактировать: это надстройка VSTO (в процессе), поэтому WPF-элемент управления работает в одном потоке с Outlook.

1 Ответ

0 голосов
/ 11 июня 2018

Вам необходимо настроить WH_GETMESSAGE hook (SetWindowsHookExW(WH_GETMESSAGE, ...)) и переслать сообщения VK_TAB/VK_SPACE/VK_LEFT/VK_RIGHT на ваш контроль, используя TranslateMessage / SendMessage

...