CListView::OnTimer将定时器关了

一般来说,如果覆盖了虚函数和实现了消息的处理,基类的实现一般都要调用一下.
没想到,在定时器消息处理时,如果调用了基类实现,会将定时器关了.
还是调试方法的问题,遇到这类问题,要先将自己的实现屏蔽了,看看基类方法是否会将定时器关了。

void CMainView::OnTimer(UINT nIDEvent) 
{
    /// CMainView 是 CListView 的子类
    if (TIMER_EVENT_SN_ON_UPDATE == nIDEvent) {
        MyUpdateUI();
        return; ///< 定时器处理,如果自己的定时器已经处理了,不能再调用基类的处理!
    }

    /// 只要调用了基类的OnTimer, 这里就是来一次
    /// 基类的OnTimer将定时器关掉了, 单步走下去,没看到源码中怎么关的
    /// ::CallWindowProc 就没有源码了
    CListView::OnTimer(nIDEvent);
}

但是如果是CView子类中定时器处理,调用了基类实现,是不会将定时器关掉的

void CTest0921View::OnTimer(UINT nIDEvent) 
{
    /// CTest0921View 是 CView 的子类
    /// 调用了基类的OnTimer, 不会将定时器关掉! 

    CView::OnTimer(nIDEvent); ///< 每次都来
}

没有更多推荐了,返回首页