visual studio .net 2003
4(共 4)對本文的評價是有幫助 -
評價此主題
虛擬列表控制項指具有lvs_ownerdata樣式的列表檢視 (listview) 控制項。該樣式啟用控制項來支援項數達到dword(預設的項數隻擴充套件到int)。然而,該樣式的最大便利是可以使記憶體中一次只有乙個資料項子集。這使虛擬列表檢視 (listview) 控制項可以將自己借給大型資訊資料庫使用,而在這類資料庫中已存在特定的資料訪問方法。
注意 mfc 除了在clistctrl中提供虛擬列表功能外,還在在開發虛擬列表控制項時應注意一些相容性問題。有關更多資訊,請參見 platform sdk 中「列表-檢視控制項」主題的「相容性問題」一節。clistview 類中提供相同的功能。
虛擬列表控制項維護非常少的項資訊。除了項選擇和焦點資訊,所有項資訊都由控制項的所有者管理。框架通過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...