- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我不确定我是否在做一些没有记录的事情。我创建了自己的派生自 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
。
是否有一些我应该避免自己使用的保留计时器 ID?
最佳答案
来自 CListCtrl
documentation我们看到这段文字:
Also see:
- Knowledge Base article Q200054: PRB: OnTimer() Is Not Called Repeatedly for a List Control
从那篇文章中,一些相关的摘录:
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/
我有一个CListCtrl(报告样式),可以在其中清除列表并在特定时间重新填充它。在执行此操作时,我想保持垂直滚动位置。我发现有两种方法看起来很有希望: EnsureVisible() GetScro
如何更改 Clistctrl 项(报 TableView )的文本颜色? 最佳答案 您需要处理 NM_CUSTOMDRAW消息并更改该处理程序中的文本颜色。 有关示例,请参阅 this article
我有一个 CListCtrl,其中包含大约 2500 个不同的元素,其中包含一个 48x48 的图标和文本。 由于数据量大,我将其实现为提供的虚拟列表 ON_NOTIFY(LVN_GETDISPINF
如何保持CListCtrl的水平滚动条位置?我会定期转储并重新填充列表控件的内容,因此无需显式记住旧位置并将其恢复,滚动只返回到左上角。 我早些时候问了一个相关的问题CListCtrl: How to
我有一个显示多个系统的多个数据的 clistctrl。不同系统只能选择 1 个项目。 最初,clistctrl 会加载从不同系统的控件中选择的第一个项目。 但是当我在更改模型中的数据并设置选择后通过单
我在图标 View 中使用 CListCtrl,但它会水平滚动: 1 3 5 7 --> 2 4 6 8 --> 我宁愿它水平滚动: 1 2 3 4 5 6 | | V V 有办法吗? 最佳答案 将设
我正在为 Windows Mobile 创建 MFC 应用程序,但不知道如何为列表控件 (CListCtrl) 启用多选。在属性面板中 Single Selection 设置为 False 但仍然无法
我必须根据 CListViewCtrl 中的值启用/禁用对话框上的按钮。基于所选行。我做到了这一点: NOTIFY_HANDLER(IDC_LIST, LVN_ITEMCHANGED, OnMyLis
我需要在 MFC 中创建一个 ListControl,每行具有不同的列数。我该怎么做? 最佳答案 那是不可能的。解决方法很简单,只是不要在子项中放置任何文本。 关于c++ - 自定义 CListCtr
如何使用标题文本获取项目的索引号?我正在使用 MFC 的 CListCtrl 类。我有项目的标题文本,我可以获取该项目的索引然后更新其文本吗?如果您能提供示例,将会很有帮助。 最佳答案 CListCt
CMyListCtrl 处于虚拟数据模式和所有者绘制。当控件需要数据时,将发送一个 LVN_GETDISPINFO 通知。 下面的代码工作正常,除了它多次显示每一行。 文档说如果我设置项目的掩码的 L
有一个CListCtrl带有SetExtendedStyle (LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT),单选是false。我希望能够用鼠标选择多行。从空白区域
我有一个包含多个列的 CListCtrl,所有列都可以作为排序依据。我想添加 up 和 down 图标,以便清楚当前按哪一列排序以及朝哪个方向排序;很像 Windows 资源管理器。我的想法是向列名添
我正在使用 CListCtrl 控件在我的 MFC 应用程序中显示信息。目前,我在 SetExtendedStyle 中设置了 LVS_EX_CHECKBOXES,因此控件中的所有行旁边都有一个复选框
我目前有 NM_CUSTOMDRAW 消息调用一个函数来在报告模式下为 listctrl 的行着色。我可以检测何时选择了一行并自己为其着色,但是不会为选定的单元格调用此方法,因此我无法为该单元格着色。
谁能帮我知道,CListCtrl::GetItemData() 在 MFC、VC++ 中有什么用? 我查阅了 MSDN 描述,但不够清楚。 如果有人可以提供简短的解释和一些示例,那就太好了并且会有很大
如何使 CListCtrl 自动调整其列的宽度?通常,当列表中的项目太长时,后端会从 View 中消失,用户必须手动调整相应列的宽度。有没有办法通过代码来做到这一点? 最佳答案 自动调整列大小很容易:
我想将 CListCtrl 控件的任何单元格的字体更改为粗体。任何人都可以告诉如何为 CList Ctrl 做到这一点。 我已经为 CTreeCtrl 做了这个,就像这样 pTC->SetItemSt
我想为列表的任何列使用 CListCtrl.EditLabel()。我该如何实现这样的功能? 最佳答案 这是可行的,但它确实需要大量填充鼠标点击和焦点事件。 简而言之,您捕获鼠标左键按下消息并将其转换
我想将特定列的背景颜色更改为对话框的颜色(灰色)。我怎样才能实现它? void CUcsOpTerminalDlg::OnCustomdrawFeatureList(NMHDR *pNMHDR, LR
我是一名优秀的程序员,十分优秀!