【问题标题】:Can't catch TVN_SELCHANGED无法捕捉 TVN_SELCHANGED
【发布时间】:2012-05-31 09:25:13
【问题描述】:

我在对话框中有一个 CTreeCtrl 并捕获 TVN_SELCHANGED 消息,但执行不会进入处理程序。有什么问题? 我的代码:

BEGIN_MESSAGE_MAP(CMaterParamExtDlg, CDialog)
   ON_NOTIFY(TVN_ITEMCHANGING, IDC_MATERIAL_PROP_TREE, OnSelChangingTreeCtrl)
   ON_NOTIFY(TVN_ITEMCHANGED, IDC_MATERIAL_PROP_TREE, OnSelChangedTreeCtrl)
END_MESSAGE_MAP()

void CMaterParamExtDlg :: OnSelChangedTreeCtrl (NMHDR* pNMHDR, LRESULT* pResult) 
{
    if (m_TreeCtrl != 0)
    {
        HTREEITEM treeitem = m_TreeCtrl->GetSelectedItem();
        CString treeitemtext = m_TreeCtrl->GetItemText(treeitem);

        MessageBox(treeitemtext);
    }

    *pResult = 0;
}

void CMaterParamExtDlg :: OnSelChangingTreeCtrl (NMHDR* pNMHDR, LRESULT* pResult)
{
    if (m_TreeCtrl != 0)
    {
        HTREEITEM treeitem = m_TreeCtrl->GetSelectedItem();
        CString treeitemtext = m_TreeCtrl->GetItemText(treeitem);

        MessageBox(treeitemtext);
    }

    *pResult = 0;
}

我尝试使用断点查看执行是否进入处理程序,但没有任何反应。

树控件属性:

CONTROL         "",IDC_MATERIAL_PROP_TREE,"SysTreeView32",TVS_HASBUTTONS 
| TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP 
| TVS_TRACKSELECT | WS_BORDER | WS_HSCROLL | WS_TABSTOP,4,4,115,218

【问题讨论】:

  • 您示例中的消息映射不包含TVN_SELCHANGED 的条目。您确定您发布的代码正确吗?
  • @Joachim Pileborg 非常感谢。我的消息不匹配。奇怪的是我没有注意到它。

标签: c++ mfc treecontrol


【解决方案1】:

很简单。使用 TVN_SELCHANGED 而不是 TVN_ITEMCHANGED。 TVN_ITEMCHANGING 也是如此。

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多