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

时间:2011-06-03 08:36:11

标签: c++ events mfc

我想知道如何处理动态创建的变量的事件,例如列表控件。

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

如何处理pList的事件LVN_ITEMCHANGED?

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

我是否必须创建扩展的CListCtrl或者还有其他方法吗?我宁愿不创建扩展类。

1 个答案:

答案 0 :(得分:1)

LVN_ITEMCHANGED通过WM_NOTIFY消息从控件发送到其父级,因此您只需要在父级的类中添加LVN_ITEMCHANGE处理函数(例如CMyDlg):

在头文件中:

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控件(通过资源编辑器或动态)并不重要,方法是相同的。只需确保在ID消息映射条目中使用正确的控件ON_NOTIFY即可。 (ID传递给Create / CreateEx或在资源编辑器的“属性”中定义。