虛擬列表控制項使用

2021-06-17 22:15:25 字數 2534 閱讀 3766

visual studio .net 2003

4(共 4)對本文的評價是有幫助 - 

評價此主題

虛擬列表控制項指具有lvs_ownerdata樣式的列表檢視 (listview) 控制項。該樣式啟用控制項來支援項數達到dword(預設的項數隻擴充套件到int)。然而,該樣式的最大便利是可以使記憶體中一次只有乙個資料項子集。這使虛擬列表檢視 (listview) 控制項可以將自己借給大型資訊資料庫使用,而在這類資料庫中已存在特定的資料訪問方法。

注意   mfc 除了在clistctrl中提供虛擬列表功能外,還在 

clistview 類中提供相同的功能。

在開發虛擬列表控制項時應注意一些相容性問題。有關更多資訊,請參見 platform sdk 中「列表-檢視控制項」主題的「相容性問題」一節。

虛擬列表控制項維護非常少的項資訊。除了項選擇和焦點資訊,所有項資訊都由控制項的所有者管理。框架通過lvn_getdispinfo通知訊息來請求資訊。若要提供請求的資訊,虛擬列表控制項的所有者(或控制項本身)必須處理該通知。使用「屬性」視窗可以很容易地完成此操作(請參見將訊息對映到函式)。所得到的**應類似於下面的示例(其中cmylistctrl是虛擬列表控制項物件,控制項正在處理通知)。

begin_message_map(cmylistctrl, clistctrl)

on_notify_reflect(lvn_getdispinfo, ongetdispinfo)

end_message_map()

lvn_getdispinfo通知訊息的處理程式中,必須檢查正在請求的資訊的型別。可能值是:

然後應將所有請求的資訊提供給框架。

下面的示例摘自列表控制項 (list control) 物件的通知處理程式體,它通過為文字緩衝區和項的影象提供資訊來說明一種可能的方法:

lv_dispinfo* pdispinfo = (lv_dispinfo*)pnmhdr;

lv_item* pitem= &(pdispinfo)->item;

int iitemindx= pitem->iitem;

if (pitem->mask & lvif_text) //valid text buffer?

}if pitem->mask & lvif_image) //valid image?

pitem->iimage=

m_items[iitemindx].m_iimageindex;

由於這種型別的列表控制項 (list control) 是提供給大的資料集的,因此建議您快取請求的項資料以提高檢索效能。框架提供快取提示機制,通過傳送lvn_odcachehint通知訊息來幫助優化快取。但是,您必須使用一種稍有不同的方法來處理該通知。使用「屬性」視窗,重寫列表控制項 (list control) 物件的onchildnotify函式。在該示例的情況下為cmylistctrl

在處理程式體中檢查lvn_odcachehint訊息,如果找到,則準備快取。

下面的示例(摘自onchildnotify函式體)執行此檢查並呼叫cmylistctrl類的prepcache成員函式。

nmlvcachehint* pcachehint=null;

if (message == wm_notify)

return false;

}else

return clistctrl::onchildnotify(message, wparam, lparam, plresult);

注意,如果訊息型別不是lvn_odcachehint,則通知將傳遞給基類 (clistctrl)。有關準備和維護快取的更多資訊,請參見 platform sdk 中的「列表-檢視控制項」主題的「快取管理」一節。

當需要查詢特定的列表控制項項時,虛擬列表控制項傳送lvn_odfinditem通知訊息。列表檢視 (listview) 控制項接收快捷鍵訪問或接收lvm_finditem訊息時傳送該通知訊息。搜尋資訊以lvfindinfo結構的格式傳送,該結構是nmlvfinditem結構的成員。通過重寫列表控制項 (list control) 物件的onchildnotify函式來處理該訊息,並在處理程式體中檢查lvn_odfinditem訊息。如果找到此訊息,則執行相應的操作。

您應該準備好搜尋與列表檢視 (listview) 控制項給定的資訊匹配的項。如果成功,則應返回項的索引;如果沒有找到匹配項,則返回 -1。

樹控制項中使用虛擬列表

插入時使用 tvitem tvitem zeromemory tvitem,sizeof tvitem tvitem.mask tvif text tvif image tvif children tvif selectedimage tvif param tvitem.psztext lpsfi....

虛擬列表控制項(CListCtrl)

m list.setitemcount 100 3 處理它的通知訊息。五 如何響應虛擬列表的訊息 1 處理 lvn getdispinfo 通知訊息 當虛擬列表控制項需要某個資料的時候,它給父視窗傳送乙個 lvn getdispinfo通知訊息,表示請求某個資料。因此列表的所有者視窗 或者它自己 必...

虛擬列表控制項(CListCtrl)

虛擬列表控制項 clistctrl 2011年02月16日 星期三 下午 02 02 m list.setitemcount 100 3 處理它的通知訊息。五 如何響應虛擬列表的訊息 http www.pudn.com downloads72 sourcecode windows control l...