2009-06-01 4 views
3

저는 우리가 가지고있는 오래된 MFC 기반 라이브러리를 .NET 래퍼로 작성하고 있습니다. 창 메시지를 사용하여 알림을 보내는 클래스를 기반으로합니다. 그것은 사용자가 창 핸들을 전달할 수있는 기능을 가지고 있으며 해당 창은 메시지를 수신합니다.창이없는 창 메시지를 보내거나받을 수 있습니까?

내 래퍼의 사용자에게 Control의 하위 클래스를 지정하고 메시지를 받기 위해 컨트롤의 핸들을 전달할 수는 있지만 끔찍한 일입니다. 래퍼 클래스가 오래된 라이브러리가 메시지를 보낼 때마다 발생하는 이벤트를 갖기를 바란다. 메시지의 디코딩을 합리적인 것으로 할 수있다. 그러나 래퍼 클래스를 컨트롤로 사용하지 않으려합니다.

'더미'창 핸들을 만들고 창을 만들지 않고 해당 핸들로 보낸 메시지를받을 수있는 방법이 있습니까?

답변

9

당신을 도울 수있는 MessageOnly Windows의 개념이 있습니다. 래퍼 클래스에 내부 메시지 전용 창을 만들고이 핸들을 이전 라이브러리에 전달할 수 있습니다.

0

메시지 펌프가있는 스레드를 만들어 메시지를 보내보십시오. 그런 다음 스레드는 C# 코드에서 처리 할 이벤트를 발생시킵니다.

-1

윈도우 핸들 이면 Windows와 관련되어 있기 때문에 창 핸들을 만들 수는 없지만 WS_VISIBLE 플래그가 설정되지 않은 창을 만들어 메시지 릴레이에 사용할 수 있습니다 만. 그 기술을 때때로 MFC 전용 응용 프로그램에서 크로스 스레드 통신을 수행하는 데 사용합니다 (아무에게도 말하지 마십시오). CWnd에서 (C++) 클래스를 파생시키고 메시지를 처리하고 함수를 호출하거나 수신 된 모든 메시지에 대해 신호를 내보낼 수 있습니다. 그 경험이 없어도 C# 코드로 작동하게 만들 것입니다.

관련 문제