1.使用setredraw禁止視窗重繪,操作完成後,再恢復視窗重繪
m_ctllist.setredraw(false);
//以下為更新資料操作
//……
//恢復視窗重繪
m_ctllist.setredraw(true);
2.使用lockwindowupdate禁止視窗重繪,操作完成後,用unlockwindowupdate恢復視窗重繪
m_ctllist.lockwindowupdate();
//以下為更新資料操作
//……
//恢復視窗重繪
m_ctllist.unlockwindowupdate();
3.使用listctrl的內部雙緩衝
m_ctllisit.setextendedstyle(m_ctllisit.getextendedstyle()|lvs_ex_doublebuffer);
vc6未定義lvs_ex_doublebuffer巨集,使用者可以自定義,如下:
#define lvs_ex_doublebuffer 0x00010000
4.virtual list
首先要設定listctrl風格為lvs_report | lvs_ownerdata或在listctrl屬裡中的more styles頁面中選中owner data核取方塊。
其次要向應lvn_getdispinfo訊息;
void ongetdispinfolist(nmhdr* pnmhdr, lresult* presult)
;if (pitem->mask & lvif_text)
*presult = 0;
}最後便是生成緩衝區資料
void insertdata()
}if (nitemcount < 2)
m_ctllist.setitemcountex(1);
else
m_ctllist.setitemcountex(nitemcount);
m_ctllist.invalidate();
} 若要修改資料,只要修改緩衝區m_arraybuff的資料即可以
5.custom redraw
既然是自繪,首先當然是過載clistctrl類,並接管wm_erasebkgnd訊息,去掉預設的處理,改為不處理
bool clistctrlex::onerasebkgnd(cdc* pdc)
void clistctrlex::onpaint()
防止CListCtrl閃爍的幾種方法
1.bool clistctrlex onerasebkgnd cdc pdc 響應wm erasebkgnd訊息 return false 遮蔽預設處理 return clistctrl onerasebkgnd pdc 2.void clistctrlex onpaint 響應wm paint訊...
防止ClistCtrl重新整理閃爍的五種方法
程式需要從資料庫某乙個活動表中,定時取資料,更新介面的列表顯示,比如有20條資料 變化 則這20資料 不停的變化,通過其他程式實現 方案 1 先在列表中查詢,後插入 比如每條記錄都有乙個唯一的編號,查詢的時候,首先查詢該編號的記錄在列表中是否存在,如果存在 則找到item後,直接更新各個列的資料,如...
防止WinForm閃爍
一 起因 相信很多在用vs開發winform的客戶端程式的碼農,都會碰到如題所示的問題。窗體在關閉或者開啟時,總是會閃爍一下。對於我這種強迫症患者,看到這個閃來閃去,心裡就不好。隨後在網上蒐羅了一下,雜七雜八,你一言我一句,試遍了所有的方法,最終確定了以下方法,我試驗後不再閃爍。二 實現 網上的 大...