我想单击"+",展开树,有没有这样的时间.谢谢

解决方案 »

  1.   

    查查MSDN,或在VC的ClassWizard中直接看看。
      

  2.   

    重载CTreeCtrl类的TVN_ITEMEXPANDED消息响应函数OnItemexpanded,实现如下。void CMyTreeCtrl::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
    if (pNMTreeView->action & TVE_EXPAND)
    {
    AfxMessageBox("TVE_EXPAND");
    }
    else if (pNMTreeView->action & TVE_COLLAPSE)
    {
    AfxMessageBox("TVE_COLLAPSE");
    }
    *pResult = 0;
    }
      

  3.   

    不会吧,以下是我做的测试类,请替换你的CTreeCtrl类试一下,祝成功//1、MyTreeCtrl.h 文件#if !defined(AFX_MYTREECTRL_H__92CB2FE8_DBFA_409A_980B_3F01CD289545__INCLUDED_)
    #define AFX_MYTREECTRL_H__92CB2FE8_DBFA_409A_980B_3F01CD289545__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // MyTreeCtrl.h : header file
    ///////////////////////////////////////////////////////////////////////////////
    // CMyTreeCtrl windowclass CMyTreeCtrl : public CTreeCtrl
    {
    // Construction
    public:
    CMyTreeCtrl();// Attributes
    public:// Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMyTreeCtrl)
    //}}AFX_VIRTUAL// Implementation
    public:
    virtual ~CMyTreeCtrl(); // Generated message map functions
    protected:
    //{{AFX_MSG(CMyTreeCtrl)
    afx_msg void OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult);
    //}}AFX_MSG DECLARE_MESSAGE_MAP()
    };///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MYTREECTRL_H__92CB2FE8_DBFA_409A_980B_3F01CD289545__INCLUDED_)//2、MyTreeCtrl.cpp 文件// MyTreeCtrl.cpp : implementation file
    //#include "stdafx.h"
    #include "CYourAPPClass.h"
    #include "MyTreeCtrl.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CMyTreeCtrlCMyTreeCtrl::CMyTreeCtrl()
    {
    }CMyTreeCtrl::~CMyTreeCtrl()
    {
    }
    BEGIN_MESSAGE_MAP(CMyTreeCtrl, CTreeCtrl)
    //{{AFX_MSG_MAP(CMyTreeCtrl)
    ON_NOTIFY_REFLECT(TVN_ITEMEXPANDED, OnItemexpanded)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CMyTreeCtrl message handlersvoid CMyTreeCtrl::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
    if (pNMTreeView->action & TVE_EXPAND)
    {
    AfxMessageBox("TVE_EXPAND");
    }
    else if (pNMTreeView->action & TVE_COLLAPSE)
    {
    AfxMessageBox("TVE_COLLAPSE");
    }
    *pResult = 0;
    }
      

  4.   

    另外单击的时候发送双击事件,这也不能解决我的问题,我的问题是单击树的某一项的文字并不展开,而是单击前面的"+"才展开树.本来对于一个树控件单击某一项文字也不会展开的啊!单击事件可以用
    OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)来响应,比较好。树控件默认的是
    双击某一项文字展开树,但如果你不想双击展开的话,可以把
    *pResult = 0;改为*pResult = 1;就行了。至于你具体想作什么,自己添代码就行了。
      

  5.   

    我记得好象默认的单击+就可以展开在CTreeCtrl的style or styleex中选中
      显示+
      连线到根
      树项使用ICON
      

  6.   

    好像没有那样的消息,不过你可以“曲线救国”。虽然没有单击+的消息,可我发现单击+的时候却没触发Item的selchanged()
    你试试重载selchanged()或者selchanging(),在那里做文章。
      

  7.   

    靠,在属性里设置就行了,将Has Button 设置为真!
      

  8.   

    CTreeCtrl不是有TVN_ITEMEXPANDED和TVN_ITEMEXPANDING两个消息吗?直接处理就行了呗
      

  9.   

    处理NM_CLICK事件就可以了;
    void CXXX::OnNMClick(NMHDR *pNMHDR, LRESULT* pResult) 
    {
    POINT pt = GetCurrentMessage()->pt;
    ScreenToClient(&pt);TVHITTESTINFO tvht; //大概是这个结构
    tvht.pt = pt;
    HitTest(&tvht);
    if(tvht.flags == ONITEMBUTTON)
    {
    //click the "+";
    }
    ...
    }
      

  10.   

    OnItemexpanded 展开或关闭树的时候进入,可以实现你的功能