gpt4 book ai didi

c++ - CListCtrl 类覆盖和 OnTimer

转载 作者:可可西里 更新时间:2023-11-01 10:23:41 26 4
gpt4 key购买 nike

我不确定我是否在做一些没有记录的事情。我创建了自己的派生自 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 设置为 4543

是否有一些我应该避免自己使用的保留计时器 ID?

最佳答案

来自 CListCtrl documentation我们看到这段文字:

Also see:

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

If you call the SetTimer function to send periodic WM_TIMER messages to a list control, you may find that the WM_TIMER message handler (the OnTimer function) for a list control is called only twice.

....

The list control uses the timer for editing labels, and for scrolling. When you handle the timer message, if the timer ID is your own timer, don't call the default handler (CListCtrl::OnTimer).

因此,这证实了您观察到的情况。列表控件使用计时器。我找不到所使用的特定 ID 的文档。我猜想 Microsoft 不希望 promise 记录所使用的特定 ID。他们会将控件的实现视为私有(private)的,并希望保留在未来版本中使用更多计时器 ID 的选项。但正如 IInspectable 指出的那样,他们本可以通过保留一系列 ID 来做到这一点。

我的建议是将列表控件的计时器视为越界,保留给控件使用。对于您的派生类,请使用不同的计时器。创建一个仅消息窗口并使用它来接收计时器事件。你可以subclass CWnd to achieve this .

关于c++ - CListCtrl 类覆盖和 OnTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24447373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com