VC++部件库中浮动菜单部件的解析及应用
2010-08-22 20:48:33 来源:WEB开发网二、时间码定时
CWnd::SetTimer函数可设置一个系统时间码,并指定每经过一定的时间间隔使Windows系统发送一个WM_TIMER消息到窗口的消息队列中。窗口在每当接收到相应的WM_TIMER消息时做一定的处理,便实现了定时处理。
通常应在窗口的消息循环中接受和处理WM_TIMER消息,这样将很难编制通用的定时操作。通用的定时操作应将定时处理封装在一个函数中,而不与其它的代码纠缠在一起。笔者实现这一技术的技巧是,在循环操作中截获窗口消息,如消息为指定的时间码消息,则进行定时处理;否则分发消息给窗口消息处理机制。如果定时操作已结束,则修改循环标志,退出循环。具体的代码如下:....................................
//设置时间码,pWnd为处理定时操作的窗口对象指针
pWnd- >SetTimer(0x100, uTimeOut, NULL);
//屏蔽鼠标操作,使定时操作不受影响
pWnd- >SetCapture();
//开始定时操作
BOOL bDone = FALSE;
MSG msg;
while (! bDone)
{
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_TIMER && msg. WParam == 0x100)
{
.......................
定时操作代码
.......................
//如定时操作完成,则设置循环标志,结束操作
if (定时操作完成)
bDone = TRUE;
}
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
//释放鼠标
::ReleaseCapture();
//删除时间码
pWnd- >KillTimer(0x100);
................................
函数PeekMessage截获窗口消息,TranslateMessage和DispatchMessage函数解释和分发除指定时间码消息之外的所有消息,以避免丢失消息。
更多精彩
赞助商链接