防止CListCtrl閃爍的幾種方法

2021-08-18 10:56:42 字數 1322 閱讀 3377

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的客戶端程式的碼農,都會碰到如題所示的問題。窗體在關閉或者開啟時,總是會閃爍一下。對於我這種強迫症患者,看到這個閃來閃去,心裡就不好。隨後在網上蒐羅了一下,雜七雜八,你一言我一句,試遍了所有的方法,最終確定了以下方法,我試驗後不再閃爍。二 實現 網上的 大...