4

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

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

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

4

3 回答 3

10

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

于 2009-06-01T13:36:03.917 回答
0

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

于 2009-06-01T14:03:15.517 回答
-1

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

于 2009-06-02T08:15:23.627 回答