防止CListCtrl閃爍的幾種方法

2021-05-23 12:40:17 字數 1075 閱讀 4027

1.bool clistctrlex::onerasebkgnd(cdc* pdc)

//響應wm_erasebkgnd訊息

return false;

//遮蔽預設處理

//return clistctrl::onerasebkgnd(pdc);

}2. void clistctrlex::onpaint()

//響應wm_paint訊息

cpaintdc dc(this); // device context for painting

crect rect;

crect headerrect;

cdc mendc;//記憶體id表

cbitmap memmap;

getclientrect(&rect);

getdlgitem(0)->getwindowrect(&headerrect);

mendc.createcompatibledc(&dc);

memmap.createcompatiblebitmap(&dc,rect.width(),rect.height());

mendc.selectobject(&memmap);

mendc.fillsolidrect(&rect,rgb(228,236,243));

//這一句是呼叫預設的onpaint(),把圖形畫在記憶體dc表上

defwindowproc(wm_paint,(wparam)mendc.m_hdc,(lparam)0);

//輸出

dc.bitblt(0,headerrect.height(),rect.width(), rect.height(),&mendc,0, headerrect.height(),srccopy);

mendc.deletedc();

memmap.deleteobject();

3.虛擬列表在setitemcount重新整理時,會導致滾動條自動尋找焦點行,這樣如果很多記錄且1、2秒就刷一次,拉滾動條的時候就自動又回去了,不方便,解決這個問題的方法是:m_listctrlex.setitemcountex(vecitems.size(), lvsicf_noscroll);

防止CListCtrl閃爍的幾種方法

1.使用setredraw禁止視窗重繪,操作完成後,再恢復視窗重繪 m ctllist.setredraw false 以下為更新資料操作 恢復視窗重繪 m ctllist.setredraw true 2.使用lockwindowupdate禁止視窗重繪,操作完成後,用unlockwindowup...

防止ClistCtrl重新整理閃爍的五種方法

程式需要從資料庫某乙個活動表中,定時取資料,更新介面的列表顯示,比如有20條資料 變化 則這20資料 不停的變化,通過其他程式實現 方案 1 先在列表中查詢,後插入 比如每條記錄都有乙個唯一的編號,查詢的時候,首先查詢該編號的記錄在列表中是否存在,如果存在 則找到item後,直接更新各個列的資料,如...

防止WinForm閃爍

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