2011-06-03 54 views
0

我想知道如何處理動態創建的變量的事件,例如一個列表控件。如何處理MFC中動態創建的對象的事件?

CListCtrl* pList = new CListCtrl();<br/> 
pList->Create(...); 

我該如何處理爲LVN_ITEMCHANGED plist中的事件嗎?

OnLvnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
    //do stuff 
} 

我必須創建一個擴展CListCtrl或有其他方法嗎?我不想創建一個擴展類。

回答

1

LVN_ITEMCHANGED通過WM_NOTIFY消息發送從控制到其父,所以你只需要在父母的類(如的CMyDlg)添加LVN_ITEMCHANGE處理函數:

在頭文件:

class CMyDlg : public CDialog 
{ 
    ... 
protected: 
    afx_msg void OnLvnItemChanged(NMHDR *pNMHDR, LRESULT *pResult); 
    ... 
} 

在源文件:

BEGIN_MESSAGE_MAP(CMyDlg, CDialog) 
    ... 
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, &CMyDlg::OnLvnItemChanged) 
    ... 
END_MESSAGE_MAP() 

... 

void CMyDlg::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); 
    *pResult = 0; 
    ... // examine *pNMLV members for item's information 
} 

不要緊CListCtrl控制是如何創建的(通過資源編輯器或動態),方法是SA我。只要確保在ON_NOTIFY消息映射條目中使用了正確的控制ID。 (ID傳遞給Create/CreateEx或在資源編輯器中的屬性中定義)。

+0

太棒了,謝謝!沒想到我將該ID設置爲創建的呼叫。 – 2011-06-03 12:49:34

相關問題