WTL消息循环机制实现了消息过滤和空闲处理机制。
消息过滤
首先看一下CMessageLoop的核心逻辑CMessageLoop.Run()的代码:
首先看一下CMessageLoop的核心逻辑CMessageLoop.Run()的代码:
int CMessageLoop.Run()
{
BOOL bDoIdle = TRUE;
int nIdleCount = 0;
BOOL bRet;
for(;;)
{
while(!::PeekMessage(&m_msg, NULL, 0, 0, PM_NOREMOVE)
&& bDoIdle)
{
if(!OnIdle(nIdleCount++))
bDoIdle = FALSE;
}
bRet = ::GetMessage(&m_msg, NULL, 0, 0);
if(bRet == -1)
{
ATLTRACE2(atlTraceUI, 0, _T("::GetMessage returned -1 (error)/n"));
continue; // error, don't process
}
else if(!bRet)
{
ATLTRACE2(atlTraceUI, 0, _T("CMessageLoop::Run - exiting/n"));
break; // WM_QUIT, exit message loop
}
if(!PreTranslateMessage(&m_msg))
{
::T |

本文详细探讨了Windows Template Library(WTL)中的消息循环机制,包括消息过滤和空闲处理等方面,揭示了WTL如何高效处理底层Windows消息。
最低0.47元/天 解锁文章
2383

被折叠的 条评论
为什么被折叠?



