簡體   English   中英

虛擬列表控件(MFC)

[英]Virtual List Controls (MFC)

我正在使用列表控件來顯示向量中元素的表示形式。 單擊列表后,另一個控件將顯示有關該元素的信息。 元素的索引當前由控件中的索引確定,但是,如果我希望對結果進行排序或過濾,它將不再起作用。

有人告訴我可以使用虛擬列表控件,但是MSDN並不十分友好,有人可以通過使用虛擬列表控件來幫助我嗎?

坦率地說-將數據(數據向量中的位置)與列表控件中數據的表示形式(列表ctrl中的位置)綁定起來是我不希望的。

在MFC中,每個控件都有一個“ Data” DWORD成員變量-在MFC中進行編碼時,我總是為添加並傳遞到相關行引用的指針的每個項目調用“ SetItemData”,例如YourListCtrl.SetItemData((DWORDPTR)&YourData);

然后,當選擇ListCtrl項目時,您只需調用

DataTypeYouWant* pData = (DataTypeYouWant*)(YourListCtrl.GetItemData(indexofselecteditem));

或類似的東西。

另外,如果您不希望使用指針,則將該行的索引保存在行的itemdata中的原始向量中(只需將其傳遞到上述fns中即可)。

要使用虛擬列表控件,請設置LVS_OWNERDATA樣式。 然后,您需要處理LVN_GETDISPINFO通知消息(通過WM_NOTIFY發送)。

如果這樣做,您將完全負責數據,包括其顯示順序。 因此,您可以處理排序等等。

到目前為止,最簡單的方法就是使用項目數據設置/獲取可用於檢索原始數據的ID,無論它是矢量索引還是指向數據的指針,甚至是關聯容器中的鍵。

這實際上取決於您所需的性能。

我親眼看到大型數據列表的性能提高。 但是,要執行的工作很多 ,因此對於沒有太多數據的簡單使用,我建議不要使用它。

基本上,虛擬列表控件會發生什么,就是您將數據存放在自己的某些數據結構中。 由於列表視圖僅顯示全部數據的一小部分,因此它會查詢您要顯示的內容,以防發生任何事情(需要重新繪制,向上或向下滾動,更改排序等)。

我沒有適合您的示例。 但是您可以看一下codeguru,我很確定有很多很好的例子。

虛擬列表控件的目的是完全不同的:當您的列表中有很多項目(我說是2500+)時,出於性能原因,應該使用它。

在您的情況下,您所需要做的就是將矢量索引存儲在列表項數據中,如NotJarvis解釋的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM