【问题标题】:Can I send / receive window messages without a window?我可以在没有窗口的情况下发送/接收窗口消息吗?
【发布时间】:2010-10-30 09:46:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net mfc window-handles


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-15
          • 1970-01-01
          • 2013-12-03
          • 1970-01-01
          • 2012-02-29
          • 2012-06-30
          • 1970-01-01
          相关资源
          最近更新 更多