我看到这个问了很多方法,但从未见过实际工作的代码片段。
毫无疑问,我尝试了用新窗口和消息循环创建新线程的天真尝试。我有一个必须打开一个窗口并处理其消息的函数,并且必须在可以从没有现有消息循环(也没有其他窗口)或通常的 mfc 消息循环或 WTL 消息循环的应用程序调用的环境中运行。我看到了一些关于 AddMessageLoop 和 Modules 的东西?但它似乎是针对主要应用程序的。无论如何,那里可能有也可能没有 WTL 模块。需要一个带有基本消息循环的独立窗口。传入一个窗口尚未打开的 WTL 类,因此窗口在与循环相同的线程中打开。类对象是否也必须在新线程中创建?
// does not work....
static DWORD WINAPI MyRunThread(__in LPVOID lpParameter)
{
CMessageLoop theLoop;
WTLsubclass *nav = (WTLsubclass *) lpParameter;
nav->CreateWindow();
int nRet = theLoop.Run();
return nRet;
}
CreateThread(0,0,MyRunThread,&nav,0,0);