Размещенное окно в WPF не получает сообщения мыши

Зайдя немного дальше, чем размещение пользовательских элементов управления WinForms в моем приложении WPF, я фактически размещаю формы Delphi, то есть окна верхнего уровня. Я делаю это с помощью вуду в сообщении блога Как размещать HWND верхнего уровня в WPF.

Почти все работает идеально. Я отправляю COM-серверу, встроенному в Delphi, строку пути к меню, и он отправляет обратно дескриптор окна, который я передаю элементу управления хостом, описанному в блоге. Окно Delphi принимает почти все события (вернее, сообщения Windows) корректно, без какого-либо вмешательства с моей стороны.

Единственная проблема - кнопки. Они получают событие/сообщение щелчка нормально и работают, но теперь ребята из Delphi добавили к кнопкам новые значки, и у каждой кнопки есть активный значок, значок наведения и значок щелчка. Они не получают ни одного из сообщений, которые должны изменить эти значки. Почему почти все сообщения работают, кроме этих? Что я могу прочитать и или сделать, чтобы попытаться исправить это?


person ProfK    schedule 22.06.2014    source источник
comment
Откуда вы знаете, что они не получили сообщение? Вы проверили это с помощью такого инструмента, как Spy++ msdn.microsoft.com/en-us /библиотека/dd460756.aspx   -  person Simon Mourier    schedule 04.07.2014
comment
@SimonMourier Я предполагаю, что они не получают сообщение, потому что там, что бы это ни было в Delphi, события наведения мыши не срабатывают и не меняют цвет. В чистом приложении Delphi это работает.   -  person ProfK    schedule 04.07.2014
comment
Поэтому вы должны проверить это с помощью Spy++ или альтернативных инструментов, иначе вы можете гоняться не за той мышью.   -  person Simon Mourier    schedule 04.07.2014
comment
можно ли выложить рабочий образец? можем посмотреть.   -  person pushpraj    schedule 05.07.2014
comment
Вы поймали мышь?   -  person dvasanth    schedule 08.07.2014


Ответы (1)


В событии MouseOver отправьте пользовательское сообщение и перехватите его.

Взаимодействие WPF и Win32
HWND внутри WPF > Заметные различия в вводе поведение

Пока мышь находится над HwndHost, ваше приложение не получает события мыши WPF, и значение свойства WPF IsMouseOver будет ложным.

person Toris    schedule 10.07.2014
comment
События — это события Delphi, обрабатываемые в коде Delphi. Это работает нормально, пока это окно не будет "размещено" в моем окне. Тогда это становится менее важным, чем код WPF или Delphi. - person ProfK; 12.07.2014