Я встраиваю элемент управления 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.