2014-06-22 5 views
1

WPF 응용 프로그램에서 WinForms 사용자 컨트롤을 호스팅하는 것보다 조금 더 많은 작업을 수행하면서 실제로 최상위 창인 Delphi 양식을 호스팅하고 있습니다. 나는 블로그 게시물 How To Host Top-Level HWNDs In WPF에서 부두교를 통해 그렇게하고있다.WPF의 호스팅 된 창에 마우스 메시지가 표시되지 않습니다.

거의 모든 것이 완벽하게 작동합니다. 델파이에 내장 된 COM 서버를 메뉴 경로 문자열로 보내면 윈도우 핸들이 다시 전송됩니다.이 핸들은 블로그에 설명 된 호스트 컨트롤로 전달됩니다. 델파이 창은 내 모든 개입없이 거의 모든 이벤트 (오히려 Windows 메시지)를 올바르게 수신합니다.

유일한 문제는 버튼입니다. 클릭 이벤트/메시지를 수신하고 작동하지만 델파이 직원은 버튼에 새로운 아이콘을 추가했으며 각 버튼에는 활성 아이콘, 호버 아이콘 및 클릭 아이콘이 있습니다. 그들은이 아이콘을 변경해야하는 메시지를받지 못합니다. 왜 거의 모든 메시지가 이들을 제외하고 작동합니까? 이것을 읽고 수정할 수있는 방법은 무엇입니까?

+0

메시지를받지 못했다는 것을 어떻게 알 수 있습니까? Spy ++와 같은 도구로 확인 했습니까? http://msdn.microsoft.com/en-us/library/dd460756.aspx –

+0

@SimonMourier 델파이에 무엇이 있더라도 메시지를받지 못한다고 가정합니다. " 마우스 오버 "이벤트가 발생하지 않고 색상이 변경됩니다. 순수 델파이 응용 프로그램 에서이 작동합니다. – ProfK

+0

Spy ++ 또는 다른 도구로 확인해야합니다. 그렇지 않으면 잘못된 마우스를 쫓을 수 있습니다. –

답변

0

MouseOver 이벤트에서는 사용자 메시지를 보내고 catch합니다. WPF 내부

WPF and Win32 Interoperation
의 Hwnd> 주목할만한 입력 동작의 차이 마우스가 HwndHost 위에있을 때

는 응용 프로그램이 WPF 마우스 이벤트를 수신하지 않으며, 허위 될 것 IsMouseOver WPF 속성 값 .

+0

이벤트는 Delphi 이벤트로, Delphi 코드로 처리됩니다. 이 창은 내 창에서 '호스팅'할 때까지 제대로 작동합니다. 그런 다음 WPF 또는 Delphi 코드보다 문제가 적습니다. – ProfK