CAppModule与CAtlExeModuleT,获取应用程序消息循环
CAppModule vs CAtlExeModuleT , getting the application message loop
我正试图从我的项目中的ATL::CAppModule获取消息循环,但似乎没有,所以:
- 我已经尝试定义了CAppModule,
extern CAppModule _Module;
在"stdafx.h"
中,CAppModule _Module;
在.cpp文件中,它编译、链接,在执行注册步骤时,我在atlbase.h
中得到一个断言ATLASSERT(_pAtlModule == NULL);
这意味着CAppModule已经被声明
但我似乎找不到另一个CAppModule实例化,相反,我看到了一个CAtlExeModuleT实例化(这不是我的代码..)
现在。。从我搜索的内容来看,我还没有找到从CAtlExeModueT对象获取消息循环的方法。它们是不同的东西还是我错过了什么?
这里有多种问题。CAppModule
是一个WTL类。_pAtlModule
是指向模块singleton类的静态/全局ATL变量。
您无法用WTL CAppModule
修复ATL _pAtlModule
问题,因为两者不相关(尽管两者之间有一定的相似性)。
要修复_pAtlModule
问题,您需要一个ATL模块实例。最简单的是添加CComModule
static:
CComModule _Module; // <-- Here you go
int _tmain(int argc, _TCHAR* argv[])
{
//...
因为CComModule
本身只是为了向后兼容,所以最好使用CAtlExeModuleT
(和朋友),但是WTL不会以这种方式工作,因为WTL的CAppModule
继承自CComModule
。CAppModule
的全局实例也将是ATL CComModule
:的实例
CAppModule _Module;
int _tmain(int argc, _TCHAR* argv[])
{
// ...
_Module.Init(...
CMessageLoop MessageLoop;
_Module.AddMessageLoop(&MessageLoop);
// ...
然后稍后介绍一些应用程序对象:
CMessageLoop* pMessageLoop = _Module.GetMessageLoop();
CCD_ 18调用将检索您先前添加的消息循环。
解决了这个ATL/WTL问题后,您可以转到WTL消息循环,在那里您希望PreTranslateMessage
在模式对话框消息循环上被调用,但它不会在那里被调用,因为它不应该以这种方式工作(CMessageLoop
调用消息过滤链,而模式对话框的循环不调用)。
相关文章:
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 将加密消息从 php 发送到 C++ 应用程序,然后使用 CryptoPP 进行解密
- Log4net,将日志消息从 c++ dll 发送到 c# 应用程序?
- 将 Kamailio SIP 消息转发到 C 应用程序
- 如果我在 Xbox UWP 应用程序上收到激活错误并且错误消息中没有任何有用的内容,该怎么办
- 阻止后台应用程序接收消息
- ACE在同一PC上具有多个应用程序实例 - 仅首先获取消息
- 发送消息WM_SETTEXT不适用于 MFC 应用程序的另一个应用程序
- 在控制台应用程序中处理空的windows消息队列
- 处理Windows消息,以便我的应用程序正确响应
- Qt应用程序在每个消息框上崩溃
- 将在64位应用程序中编码Protobuf消息并在32位应用程序中解码
- 是否可以删除应用程序接收到的触摸消息(WM_POINTERDOWN等)
- 如何模拟原始输入/以正确的方式向应用程序发送WM_INPUT消息
- boost::asio 中的未经请求的消息使应用程序崩溃,没有 SSL 它可以正常工作,为什么
- C++/Win32 最小的可能的消息框("Hello")应用程序exe?
- 相对于 3D 应用程序中的 Windows 消息循环的计时错误
- 在到应用程序之间的消息中重复WaitForSingleObject
- CAppModule与CAtlExeModuleT,获取应用程序消息循环
- 向WPF应用程序消息泵注入消息