C++ 我可以在win32应用程序的主线程中手动调用窗口消息的处理吗?

C++ 我可以在win32应用程序的主线程中手动调用窗口消息的处理吗?,c++,winapi,mfc,C++,Winapi,Mfc,我有一个Win32 MFC应用程序,它在循环中进行一些处理。当前,循环运行时窗口停止重新绘制。我是否可以为循环中的消息队列分配时间,或者我是否必须将处理移动到其他线程以释放主线程进行消息处理?您可以使用以下代码段来处理消息: MSG msg; if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if (::GetMessage(&msg, NULL, 0, 0)) { ::Translat

我有一个Win32 MFC应用程序,它在循环中进行一些处理。当前,循环运行时窗口停止重新绘制。我是否可以为循环中的消息队列分配时间,或者我是否必须将处理移动到其他线程以释放主线程进行消息处理?

您可以使用以下代码段来处理消息:

MSG msg; 
if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) 
{ 
    if (::GetMessage(&msg, NULL, 0, 0)) 
    {
        ::TranslateMessage(&msg); 
        ::DispatchMessage(&msg); 
    }
}

但是,对于长时间的操作,最好使用单独的线程,以防止主应用程序线程被阻塞。

在MFC应用程序中,这还不够。这可能不够,也可能不够。对于某些应用程序,它肯定缺少对的调用。它也无法解释WM_退出消息。正如贴出的,这个答案不应该是被接受的答案。谢谢你,这就成功了。正在进行的处理是在模式上下文中进行的,所以在应用程序运行时,我所需要做的就是保持窗口的绘制和状态栏处于最新状态。@BaldurGíslason:模式UI中的键盘导航如何?当您应用建议的解决方案时,这种情况就会发生。同时调用PeekMessage和GetMessage是多余的。味精;while::PeekMessage&msg,NULL,0,0,PM_REMOVE{…}。由于您只对绘图感兴趣,请考虑在PEEKMeX上使用WMXFrice过滤器,或者完全去掉消息循环并使用它。将处理移动到不同的线程。