强制更新虚拟的CListCtrl

4

我有一个包含大约2500个不同元素的CListCtrl,包括48x48的图标和文本。

由于数据量很大,我将其实现为虚拟列表,提供了

ON_NOTIFY(LVN_GETDISPINFO, IDC_LST_ICONS, &CWGDIconSearchDlg::OnLvnGetdispinfoLstIcons)
ON_NOTIFY(LVN_ODFINDITEM, IDC_LST_ICONS, &CWGDIconSearchDlg::OnLvnOdfinditemLstIcons)

我的问题是,当我改变列表内容时,这些回调函数从未被调用。如何强制它们被调用?

1
下次请使用代码标签。 - gsamaras
1个回答

5

Windows无法知道您在虚拟列表中更改了项目。

为了触发CListCtrl的重绘,您必须调用yourcontrol.Invalidate(),这将触发控件的重新绘制。


3
如果只有一个或几个项目发生更改,另一种选择是调用“RedrawItems(first, last)”函数。这样可以避免重新绘制整个控件窗口时可能出现的闪烁问题。 - Jonathan Lidbeck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接