IsIdleMessage是一种
函数,功能是若要避免在产生指定的消息后调用OnIdle函数,应重载该函数。
主要介绍
语法:
virtual BOOL IsIdleMessage(MSG * pMsg);
参数:
pMsg 指向当前被处理的消息
返回值:
若在处理消息后调用了OnIdle,返回非零值;否则返回零。
说明:
当产生重复的鼠标消息和闪烁光标消息后,该函数的默认实现并不调用OnIdle。
若应用程序创建了一个短的定时器,OnIdle将被频繁调用,导致性能上的问题。
为改善这种应用程序的性能,重载应用程序的CWinApp派生类中的IsIdleMessage消息,
按如下方式检测WM_TIMER消息:
BOOL CMyApp::IsIdleMessage(MSG * pMsg)
{
if (!CMyApp::IsIdleMessage(pMsg)||pMsg->message==WM_TIMER)
return FALSE;
else
return true;
}
这种方式处理WM_TIMER消息可以改善使用短定时器的应用程序的性能。
示例
/************************************************************
演示函数原型:CWinApp::IsIdleMessage( pMsg);
程序功能说明:调用setTimer函数后避免频繁调用OnIdle以改善性能。
************************************************************/
BOOL CMyApp::IsIdleMessage(MSG * pMsg)
{
//判断信息pMsg是空闲信息还是setTimer函数发出的信息
if (!CMyApp::IsIdleMessage(pMsg)||pMsg->message==WM_TIMER)
return FALSE;
else
return true;
}