我不确定我是不是在做一些没有证件的事。我创建了从CListCtrl派生的自己的类,然后在其中重写了OnTimer处理程序:
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设置为45和43。
是否保留了一些计时器I以避免使用自己?
发布于 2014-06-27 09:18:00
在CListCtrl 文档中,我们看到了以下文本:
另见:
从这篇文章中,有一些相关的摘录:
如果调用SetTimer函数向列表控件发送定期WM_TIMER消息,您可能会发现列表控件的WM_TIMER消息处理程序( OnTimer函数)只被调用两次。 …… list控件使用计时器编辑标签和滚动。当您处理计时器消息时,如果计时器ID是您自己的计时器,则不要调用默认处理程序(CListCtrl::OnTimer)。
这证实了你所观察到的。列表控件使用计时器。我无法找到所使用的特定ID的文档。我猜Microsoft不希望承诺记录所使用的特定ID。他们会认为控件的实现是私有的,并希望保留在未来版本中使用更多计时器in的选项。但是正如IInspectable所指出的,他们可以通过保留一系列ID来做到这一点。
我的建议是将列表控件的计时器视为超出范围,并保留给控件使用。对于派生类,使用不同的计时器。创建一个仅消息窗口,并使用它接收计时器事件。你可以为了达到这个目的。
https://stackoverflow.com/questions/24447373
复制相似问题