gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:19:53 24 4
gpt4 key购买 nike

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

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

如何处理 pList 的 LVN_ITEMCHANGED 事件?

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

关于c++ - 如何处理 MFC 中动态创建对象的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6224791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com