如果您创建一个新的ATL项目并向其添加一个简单的COM对象(注意:一个对象而不是一个控件),它使用了公寓线程模型,那么是否会有一个消息泵在引擎盖下运行?我想创建一个隐藏窗口,它是我的COM对象类的成员,但我不确定是否会实际传递任何消息。这是在幕后处理还是实际创建COM对象的应用程序是否重要?
答案 0 :(得分:4)
不,默认情况下,ATL COM对象不实现消息泵。您的代码必须通过普通的Windowing库或显式消息泵实现显式使用。
答案 1 :(得分:0)
你无法获得消息泵 - 只有在需要时才将COM放在一起。您会注意到在调试时直接调用对象上的方法 - 您没有跳过消息泵。当然,如果你把多个住在不同公寓的物品放在一起,你就会成为现实。
如果您需要一个窗口,可以使用标准方法创建一个窗口。 ATL提供了简单的窗口类,如CWindow和CWindowImpl,可以使这更容易。