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來插入資料,它僅僅知道自己應該顯示多少資料。但是它如何知道要...