如何处理MFC中动态创建的对象的事件?

问题描述:

我想知道如何处理动态创建的变量的事件,例如一个列表控件。如何处理MFC中动态创建的对象的事件?

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

我该如何处理为LVN_ITEMCHANGED plist中的事件吗?

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

我必须创建一个扩展CListCtrl或有其他方法吗?我不想创建一个扩展类。

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