虛擬列表 LVN GETDISPINFO

2021-10-24 12:58:22 字數 1543 閱讀 6146

lvn_getdispinfo

當虛擬列表控制項需要某個資料的時候,它給父視窗傳送乙個 lvn_getdispinfo通知訊息,表示請求某個資料。因此列表的所有者視窗(或者它自己)必須處理這個訊息。例如派生類的情況 (cmylistctrl是乙個虛擬列表類物件):

//這裡處理的是反射訊息

begin_message_map

(cmylistctrl, clistctrl)

//}afx_msg_map

end_message_map

()

lvn_getdispinfo的處理函式用於對每行記錄的內容進行賦值,訊息帶的引數為乙個lv_item結構體:

typedef

struct taglvitema

lvitema,

*lplvitema;

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

lvif_text必須填寫 psztext 成員。

lvif_image必須填寫 iimage 成員。

lvif_indent必須填寫 iindent 成員。

lvif_param必須填寫 lparam 成員。

lvif_state必須填寫 state 成員。

根據它的請求,填充所需的資料即可。

***************== 例子**********************

lv_dispinfo* pdispinfo =

(lv_dispinfo*

)pnmhdr;

lv_item* pitem=

&(pdispinfo)

->item;

int iitemindx= pitem-

>iitem;

if(pitem-

>mask & lvif_text)

//字串緩衝區有效

}/*注意,多數情況下要使用lstrcpyn ,因為最多複製字元的個數由pitem->cchtextmax給出:

lstrcpyn(pitem->psztext, text, pitem->cchtextmax);

*/if

(pitem-

>mask & lvif_image)

//是否請求影象

pitem-

>iimage= m_items[iitemindx]

.m_iimageindex;

甚至連某行資料是否選中(當有checkbox的情況下)的資訊也需要由使用者自己來維護,例如:

//是否顯示該行的選擇資訊?if(

ischeckboxesvisible()

)//自定義函式

else

}

**:

1.2.

虛擬列表2

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

clistctrl 虛擬列表

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

clistctrl 虛擬列表

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