如何在运行时创建的 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 事件?的主要内容,如果未能解决你的问题,请参考以下文章