CListCtrl 虛擬列表顯示核取方塊

2021-07-03 16:14:50 字數 1224 閱讀 7301

在用clistctrl控制項顯示大量資料的時候速度相當慢,而且對記憶體的占用也是相當大,特別是針對資料庫中資料顯示的時候,因為資料庫中的資料量一般都比較龐大,所以如果使用預設的clistctrl控制項就顯得力不從心了,那麼是不是大量資料就不能使用clistctrl空間進行顯示了那,當然不是了,clistctrl控制項支援虛擬列表技術,採用虛擬列表對大量資料進行顯示,既可以提高速度(不是一般的快,是非常快),還可以減少記憶體占用,不過虛擬列表和普通的列表實現顯示的方式不太一樣,並且在使用虛擬列表之後,你會發現如果你設定了lvs_ex_checkboxes風格想顯示核取方塊,但核取方塊位置是空白的,並沒有顯示核取方塊,這裡就教你怎麼顯示虛擬列表中的核取方塊。

1、你需要記錄當前選擇的記錄的狀態(選中或未選中),這樣你才能在列表需要資料的時候得到當前資料的選擇狀態(虛擬列表中需要自己管理資料的選中狀態)

2、在單擊事件中處理狀態的改變

3、在lvn_getdispinfo事件中顯示狀態

下面給出一些顯示時的**

[html]view plain

copy

void ctestundeletedlg::onlvngetdispinfolist1(nmhdr *pnmhdr, lresult *presult)  

lstrcpyn(pitem->

psztext, text, pitem-

>

cchtextmax);//建議使用該函式複製字元給子項,複製的更安全,字元數由pitem-

>

cchtextmax給出        text.empty();  

}          pitem->

mask |= lvif_state;  

pitem->

statemask

= lvis_stateimagemask

;  if(itemlist[itemid].bchecked)//判斷結構中儲存的當前行的選中狀態  

else  

*presult= 0

;  }  

在單擊事件中直接判斷itemlist[itemid].bchecked的選中狀態即可,對該值進行取反操作然後更新狀態即可完成選中與取消

[html]view plain

copy

void ctestundeletedlg::onnmclicklist1(nmhdr *pnmhdr, lresult *presult)  

clistctrl 虛擬列表

一 什麼是虛擬列表控制項 虛擬列表控制項是指帶有lvs ownerdata風格的列表控制項。二 為什麼使用虛擬列表控制項 為此,mfc特別提供了虛擬列表的支援。乙個虛擬列表看起來和普通的listctrl一樣,但是不用通過insertitem來插入資料,它僅僅知道自己應該顯示多少資料。但是它如何知道要...

clistctrl 虛擬列表

一 什麼是虛擬列表控制項 虛擬列表控制項是指帶有lvs ownerdata風格的列表控制項。二 為什麼使用虛擬列表控制項 為此,mfc特別提供了虛擬列表的支援。乙個虛擬列表看起來和普通的listctrl一樣,但是不用通過insertitem來插入資料,它僅僅知道自己應該顯示多少資料。但是它如何知道要...

列表顯示格式

list2 1,2,3,4,5,6,7,8,9 range start,end,step list2 start,end,step print list2 1 2 1 print list2 1 print list2 2 2 import random 取乙個60 100的隨機整數 print r...