首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CListCtrl类覆盖和OnTimer

CListCtrl类覆盖和OnTimer
EN

Stack Overflow用户
提问于 2014-06-27 08:32:43
回答 1查看 781关注 0票数 2

我不确定我是不是在做一些没有证件的事。我创建了从CListCtrl派生的自己的类,然后在其中重写了OnTimer处理程序:

代码语言:javascript
复制
void CListCtrl2::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default

    switch(nIDEvent)
    {
    case MY_TIMER_ID:
        {
            //Do my processing
            doMyProcessing();
        }
        break;

    default:
        {
            //Default
            CListCtrl::OnTimer(nIDEvent);
        }
        break;
    }
}

但让我感到奇怪的是,这个OnTimer()例程是用不是我的计时器ID调用的。例如,通过对调试器检查点的快速研究,发现我的default处理程序被调用,nIDEvent设置为4543

是否保留了一些计时器I以避免使用自己?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-27 09:18:00

CListCtrl 文档中,我们看到了以下文本:

另见:

  • 知识库文章Q200054:PRB:不重复调用OnTimer()作为列表控件

从这篇文章中,有一些相关的摘录:

如果调用SetTimer函数向列表控件发送定期WM_TIMER消息,您可能会发现列表控件的WM_TIMER消息处理程序( OnTimer函数)只被调用两次。 …… list控件使用计时器编辑标签和滚动。当您处理计时器消息时,如果计时器ID是您自己的计时器,则不要调用默认处理程序(CListCtrl::OnTimer)。

这证实了你所观察到的。列表控件使用计时器。我无法找到所使用的特定ID的文档。我猜Microsoft不希望承诺记录所使用的特定ID。他们会认为控件的实现是私有的,并希望保留在未来版本中使用更多计时器in的选项。但是正如IInspectable所指出的,他们可以通过保留一系列ID来做到这一点。

我的建议是将列表控件的计时器视为超出范围,并保留给控件使用。对于派生类,使用不同的计时器。创建一个仅消息窗口,并使用它接收计时器事件。你可以为了达到这个目的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24447373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档