如何在运行时创建的 MFC 中获取 Treeview(CTreeCtrl) 的 Click 事件?

Posted

技术标签:

【中文标题】如何在运行时创建的 MFC 中获取 Treeview(CTreeCtrl) 的 Click 事件?【英文标题】:How to get Click Event of Treeview(CTreeCtrl) in MFC created at runtime? 【发布时间】:2010-09-21 05:19:48 【问题描述】:

我在 MFC 应用程序的运行时创建了一个树视图,我添加了几个节点现在我想在点击节点时做一些事情,所以我如何获得树视图的点击事件?

我的代码如下所示:

CTreeCtrl *m_ctlTreeview;
m_ctlTreeview = new CTreeCtrl ;
m_ctlTreeview->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP |
                 TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT |
         TVS_SINGLEEXPAND | TVS_SHOWSELALWAYS |  
         TVS_TRACKSELECT,
                 CRect(25, 60, 385, 260), this, 0x1221);


hparentitem = m_ctlTreeview->InsertItem("Parent",TVI_ROOT);
m_ctlTreeview->InsertItem("Child", hparentitem);

【问题讨论】:

【参考方案1】:

一个选项是像往常一样在设计时使用消息映射中的ON_NOTIFY 为该子窗口ID(在您的示例中为0x1221)的通知消息添加一个处理程序到父类。如果没有消息,则不会触发处理程序。

或者,您可以使用ON_MESSAGE 将通用WM_NOTIFY 处理程序添加到父窗口的消息映射,然后检查消息是否来自您的新树控件。

【讨论】:

见msdn.microsoft.com/en-us/library/k35k2bfs.aspxmsdn.microsoft.com/en-us/library/749htf6k.aspx和msdn.microsoft.com/en-us/library/ff486107.aspx【参考方案2】:

我熟悉 WTL 编码,它与 MFC 有相似之处。 MFC 有一个 CTreeCtrl,WTL 有一个 CTreeViewCtrl。

包含树控件的对话框类应使用通知代码处理程序检查以下通知:

TVN_SELCHANGED -> OnTreeSelectionChange
NM_RCLICK      -> OnRButtonUp

我不想引用任何 WTL 代码,因为它可能只会造成混淆,但我希望这些信息对您有所帮助!

【讨论】:

以上是关于如何在运行时创建的 MFC 中获取 Treeview(CTreeCtrl) 的 Click 事件?的主要内容,如果未能解决你的问题,请参考以下文章

MFC - 如何在运行时更新编辑框? (C++)

MFC如何将窗口中所有控件大小随父窗口大小改变

bootstrap treevie只展开一个节点,关闭其他节点

MFC 主窗口如何在创建的子窗口前

MFC 命令按钮控件如何在多字节字符集项目中显示?

如何在 C++ 中向 MFC 项目添加另一个 gui