在视图中用Create创建的CTreeCtrl怎么响应它的ITEM点击消息??

解决方案 »

  1.   

    可以自定义一个控件ID,用ON_NOTIFY映射消息,创建控件时指定这个ID。也可以响应其父窗口的WM_NOTIFY消息,自己来判断控件。
      

  2.   

    好几个办法,OnClick就可以了,然后你自己HitTest,判断是点击到Item的哪个区域。
    另外就是ON_NOTIFY消息。
    最好是你自己派生一个类出来,这是一个好习惯。
      

  3.   

    需要在资源里加入CTreeCtrl控件吗>?
      

  4.   

    ON_NOTIFY要对应一个ID,但在资源里并没有CTreeCtrl, 怎么建立消息映射?
      

  5.   

    #define ID_LISTTREE 198631m_ListTree.Create( WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER
       | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES
       | TVS_DISABLEDRAGDROP,
       CRect(rect.left + 5, rect.top + 5, rect.left + 150, rect.bottom - 25),
       this, ID_LISTTREE );
    ON_NOTIFY(TVN_SELCHANGED, ID_LISTTREE, OnSelchangedListTree)afx_msg void OnSelchangedListTree(NMHDR* pNMHDR, LRESULT* pResult);void CLeftView::OnSelchangedListTree(NMHDR *pNMHDR, LRESULT *pResult)
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    int i = 0;
    *pResult = 0;
    }调试 OnSelchangedListTree没有执行..
      

  6.   

    调试还是进不去.. 
    总感觉不对头, ON_NOTIFY对应的ID只是随便给了一个数字而已,
    怎么知道它和谁映射了呢?
      

  7.   

    而且AfxMessageBox在void CLeftView::OnSelchangedListTree(NMHDR *pNMHDR, LRESULT *pResult) 编译报错..
    unresolved external symbol "public: int __thiscall CWnd::AfxMessageBox(char const *,char const *,unsigned int)" (?AfxMessageBox@CWnd@@QAEHPBD0I@Z)fatal error LNK1120: 1 unresolved externals
      

  8.   

    自己派生CTreeCtrl,在类中增加ITEM点击消息,具体如何实现参考MFC向导生成的代码
      

  9.   

    我也从CTreeCtrl派生过, 但还是出现了和上面一样的问题??
      没想到这个问题这么复杂啊?
      

  10.   

    这个问题不是很难
    两种方法:
    ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged);
    ON_NOTIFY(TVN_SELCHANGED, IDD_MYTREE, OnSelchanged);
    //IDD_MYTREE是在动态Create时用到的资源ID,这个在动态create的控件中要手工添加;
      

  11.   

    m_ListTree.Create不是在CLeftView类的成员函数中执行的吧?AfxMessageBox不是CWnd类的成员函数,CWnd类中也没有AfxMessageBox的定义,你是怎么写的代码?
      

  12.   

    LZ 我的问题找到了, CLeftView的派生类改成CView
    其它的消息响应楼上的已经很清楚了!