Mfc 强制更新虚拟CListCtrl

Mfc 强制更新虚拟CListCtrl,mfc,clistctrl,Mfc,Clistctrl,我有一个CListCtrl,包含大约2500个不同的元素,由48x48图标和文本组成 由于数据量很大,我将其实现为一个虚拟列表 ON_NOTIFY(LVN_GETDISPINFO, IDC_LST_ICONS, &CWGDIconSearchDlg::OnLvnGetdispinfoLstIcons) ON_NOTIFY(LVN_ODFINDITEM, IDC_LST_ICONS, &CWGDIconSearchDlg::OnLvnOdfinditemLstIcons) 我的问

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

由于数据量很大,我将其实现为一个虚拟列表

ON_NOTIFY(LVN_GETDISPINFO, IDC_LST_ICONS, &CWGDIconSearchDlg::OnLvnGetdispinfoLstIcons)
ON_NOTIFY(LVN_ODFINDITEM, IDC_LST_ICONS, &CWGDIconSearchDlg::OnLvnOdfinditemLstIcons)
我的问题是,当我更改列表内容时,这些回调从未被调用


如何强制执行此操作?

Windows无法知道您已更改虚拟列表中的项目


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

下次使用代码标记。如果只有一个或几个项目发生更改,另一种方法是调用
重画项目(第一个、最后一个)
。这避免了有时通过重画整个控制窗口而产生的闪烁。