解决MFC中CListCtrl(virtual)控件闪烁问题
2015-04-16 17:09
253 查看
文章之前,先对虚拟列表t控件做一个简单总结:
1,在资源中右键点击控件,找到【Owner Data】选择true
2,在列表控件的父窗口的类(例如对话框类)中添加 LVN_GETDISPINFO 消息,
或者在派生的控件类(CMyListCtrl)中映射 LVN_GETDISPINFO 消息
3,在消息响应函数里面写上:
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;
然后根据pItem->iItem(行数)和pItem->iSubItem(列数)进行更新列表内容,将内容拷贝到pItem->pszText里面。
4,使用 SetItemCount(); 来进行数据插入删除。更多相关信息,请翻阅codeproject
下面说一下列表控件闪烁问题的处理。
按照上面处理完成之后,如果频繁调用 SetItemCount 插入数据的话,会导致列表频繁刷新而闪烁,
影响用户体验,可以通过以下方式解决:
1,在列表控件的派生类(CMyListCtrl)中添加消息 BOOL CMyListCtrl::OnEraseBkgnd(CDC* pDC)
里面直接返回FALSE。
发现返回false之后在xp兼容有问题,不需要返回倒是可以兼容win7+xp
2,在控件的父窗口(对话框)添加消息 OnEraseBkgnd,加上代码:
至此完成。据说此方法可以解决任何控件的闪烁问题,目前只是尝试了列表控件。
1,在资源中右键点击控件,找到【Owner Data】选择true
2,在列表控件的父窗口的类(例如对话框类)中添加 LVN_GETDISPINFO 消息,
或者在派生的控件类(CMyListCtrl)中映射 LVN_GETDISPINFO 消息
3,在消息响应函数里面写上:
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;
然后根据pItem->iItem(行数)和pItem->iSubItem(列数)进行更新列表内容,将内容拷贝到pItem->pszText里面。
4,使用 SetItemCount(); 来进行数据插入删除。更多相关信息,请翻阅codeproject
下面说一下列表控件闪烁问题的处理。
按照上面处理完成之后,如果频繁调用 SetItemCount 插入数据的话,会导致列表频繁刷新而闪烁,
影响用户体验,可以通过以下方式解决:
1,在列表控件的派生类(CMyListCtrl)中添加消息 BOOL CMyListCtrl::OnEraseBkgnd(CDC* pDC)
里面直接返回FALSE。
发现返回false之后在xp兼容有问题,不需要返回倒是可以兼容win7+xp
2,在控件的父窗口(对话框)添加消息 OnEraseBkgnd,加上代码:
BOOL CMyDlg::OnEraseBkgnd(CDC* pDC) { CRect clip; m_listCtrl.GetWindowRect(clip); ScreenToClient(clip); pDC->ExcludeClipRect(clip); pDC->GetClipBox(clip); pDC->FillSolidRect(clip, GetSysColor(COLOR_BTNFACE)); return FALSE; }
至此完成。据说此方法可以解决任何控件的闪烁问题,目前只是尝试了列表控件。
相关文章推荐
- 解决MFC中CListCtrl(virtual)控件闪烁问题
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- MFC 程序解决CListCtrl控件点击项重复执行的问题
- 解决MFC控件闪烁问题的小模板
- 解决CListCtrl闪烁及水平滚动条不能跟踪拖动的问题(MFC)
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- 解决列表框更新数据的时候的闪烁问题(VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏) )
- 解决CListCtrl闪烁及水平滚动条不能跟踪拖动的问题(MFC)
- 解决CListCtrl闪烁及水平滚动条不能跟踪拖动的问题(MFC)
- 解决自绘制控件闪烁的问题
- MFC 绘制界面 控件以及屏幕闪烁的问题
- 对于C#控件的闪烁问题你是如何解决的?
- MFC List Control快速更新时闪烁问题的解决办法
- VC++ MFC+GDIPlus 双缓冲解决闪烁问题
- MFC中的双缓冲技术(解决绘图闪烁问题)
- C#控件开发的闪烁问题和解决方法总结
- 问题解决——MFC SDI程序 CFormView中控件随窗口缩放
- winfrom多控件闪烁问题的解决
- 解决ASP.NET AJAX的ModalPopupExtender控件回发闪烁的问题