没有窗口我可以发送/接收窗口消息吗?

时间:2009-06-01 13:29:18

标签: c# .net mfc window-handles

我正在围绕我们拥有的基于MFC的旧库编写.NET包装器。它基于一个使用窗口消息发送通知的类;它有一个允许用户传递窗口句柄的功能,该窗口将接收消息。

我可以要求我的包装器的用户继承Control并传递其控件的句柄以接收消息,但这太可怕了。我希望我的包装器类具有在旧库发送消息时触发的事件,然后我可以将消息解码为合理的事物。但是,我不希望我的包装类必须是一个控件。

有没有办法让我创建一个'虚拟'窗口句柄,并接收发送到该句柄的消息,而不创建窗口?

3 个答案:

答案 0 :(得分:10)

MessageOnly Windows有一个概念可以帮到你。您可以在包装器类中创建一个仅内部消息窗口,并将此句柄传递给旧库。

答案 1 :(得分:0)

您可以尝试使用消息泵创建一个线程并将消息发送到该线程。然后,该线程会引发您要在C#代码中处理的所有必要事件。

答案 2 :(得分:-1)

你不能在没有窗口的情况下创建窗口句柄,因为窗口句柄 窗口就Windows而言,但你可以创建一个没有设置WS_VISIBLE标志的窗口,并使用它只用于消息中继。我有时使用该技术在仅MFC应用程序中进行跨线程通信(不要告诉任何人;))。您可以从CWnd派生(c ++)类,让它处理消息,并为接收到的每条消息调用函数或发出信号。我想这会使它与你的C#代码一起工作,尽管我没有相关经验。