如何处理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
或在资源编辑器中的属性中定义)。
太棒了,谢谢!没想到我将该ID设置为创建的呼叫。 – 2011-06-03 12:49:34