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

发布于 2024-11-11 18:05:40 字数 318 浏览 1 评论 0原文

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

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

如何处理 pList 的 LVN_ITEMCHANGED 事件?

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

我是否必须创建一个扩展的 CListCtrl 还是有其他方法?我不想创建扩展类。

I am wondering how I can handle an event for a dynamically created variable, e.g. a list control.

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

How can I handle the event LVN_ITEMCHANGED for pList?

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

Do I have to create an extended CListCtrl or is there some other way? I would prefer not creating a extended class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自找没趣 2024-11-18 18:05:40

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

LVN_ITEMCHANGED is sent through WM_NOTIFY message from control to its parent so you just need to add LVN_ITEMCHANGE handler function in parent's class (e.g. CMyDlg):

In header file:

class CMyDlg : public CDialog
{
   ...
protected:
   afx_msg void OnLvnItemChanged(NMHDR *pNMHDR, LRESULT *pResult);
   ...
}

In source file:

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
}

It does not matter how CListCtrl control is created (through resource editor or dynamically), approach is the same. Just make sure you are using correct control ID in ON_NOTIFY message map entry. (ID passed to Create/CreateEx or defined in Properties in resource editor).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文