我想知道如何处理动态创建的变量的事件,例如列表控件。
CListCtrl* pList = new CListCtrl();<br/>
pList->Create(...);
如何处理pList的事件LVN_ITEMCHANGED?
OnLvnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult)
{
//do stuff
}
我是否必须创建扩展的CListCtrl或者还有其他方法吗?我宁愿不创建扩展类。
答案 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
或在资源编辑器的“属性”中定义。