1。TreeCtrl 用了hashbotton属性后,我将TreeCtrl绑定一个24*24 CImageList,结果发现加减号与子项上显示的位图在大小上没有什么出入!真是杯具啊。那位高人做过相关的研究,指点一二。(50分)
2。TreeCtrl 的root能不是将hashLine去掉,而child的hashline是存在的呢?(50)分。分不够可以在加~

解决方案 »

  1.   

    昨天我翻遍了CSDN,没有找到。基本上的回答都是对不上边的
      

  2.   

    你将树控件的Has Buttons、Has Lines、Lines At Root属性都设置为 True。
    然后在构件树内容的时候,可以参考如下代码:class CDialogTest : public CDialog
    {
    DECLARE_DYNAMIC(CDialogTest)public:
    CDialogTest(CWnd* pParent = NULL);   // standard constructor
    virtual ~CDialogTest();// Dialog Data
    enum { IDD = IDD_DIALOG1 };public:
    CImageList m_TreeBootImage;//Tree的图标
    CString TreeCurrent, TreeParent;//当前和父级项文本内容
    HTREEITEM hTreeCurrent, hTreeParent;//当前和父级项句柄public:
    struct FI_Sip_Item
    {
    int nUserID;
    std::string strUserName;
    std::string strSipID;
    FI_Sip_Item()
    {
    Clear();
    }
    void Clear()
    {
    nUserID = 0;
    strUserName.clear();
    strSipID.clear();
    }
    }; struct FI_Group_Room
    {
    std::string strRoomName;
    int nRoomID;
    std::vector<FI_Sip_Item> arraySipItem; FI_Group_Room()
    {
    Clear();
    }
    void Clear()
    {
    strRoomName.clear();
    nRoomID = 0;
    arraySipItem.clear();
    }
    };public:
    std::vector<FI_Group_Room> m_arrayItem;
    public:
    void InitTreeData();
    void MakeTree(); void AddSubTree(FI_Group_Room Room, HTREEITEM hPartItem);
      
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support DECLARE_MESSAGE_MAP()public:
    CTreeCtrl m_ctrTree;
    virtual BOOL OnInitDialog();
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnNMRclickTree1(NMHDR *pNMHDR, LRESULT *pResult);
    CString m_strTips;
    afx_msg void OnBnClickedButton1();
    };
    BOOL CDialogTest::OnInitDialog()
    {
    CDialog::OnInitDialog(); InitTreeData(); MakeTree(); return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
    }void CDialogTest::InitTreeData()
    {
    FI_Group_Room RoomItem;
    FI_Sip_Item SipItem;
    std::vector<FI_Sip_Item> arraySipItem; arraySipItem.clear(); SipItem.nUserID = 111;
    SipItem.strSipID = "3000105";
    SipItem.strUserName = "luodx";
    arraySipItem.push_back(SipItem); SipItem.nUserID = 112;
    SipItem.strSipID = "3000106";
    SipItem.strUserName = "apples";
    arraySipItem.push_back(SipItem); SipItem.nUserID = 113;
    SipItem.strSipID = "3000107";
    SipItem.strUserName = "eagles";
    arraySipItem.push_back(SipItem); SipItem.nUserID = 114;
    SipItem.strSipID = "3000108";
    SipItem.strUserName = "jt";
    arraySipItem.push_back(SipItem); SipItem.nUserID = 115;
    SipItem.strSipID = "3000109";
    SipItem.strUserName = "leilei";
    arraySipItem.push_back(SipItem);
    RoomItem.Clear();
    RoomItem.nRoomID = 1;
    RoomItem.strRoomName = "MC";
    RoomItem.arraySipItem = arraySipItem;
    m_arrayItem.push_back(RoomItem); RoomItem.Clear();
    arraySipItem.clear();
    RoomItem.nRoomID = 2;
    RoomItem.strRoomName = "黑翼";
    RoomItem.arraySipItem = arraySipItem;
    m_arrayItem.push_back(RoomItem); RoomItem.Clear();
    arraySipItem.clear();
    RoomItem.nRoomID = 3;
    RoomItem.strRoomName = "ZG";
    RoomItem.arraySipItem = arraySipItem;
    m_arrayItem.push_back(RoomItem);
    }void CDialogTest::MakeTree()
    {
    //--------------Tree控件操作变量------------------------
    TVINSERTSTRUCT tvInsert;
    HTREEITEM hParent, hPartItem; //------------------------------------------------
    tvInsert.hParent = NULL;
    tvInsert.hInsertAfter = NULL;
    tvInsert.item.mask = TVIF_TEXT; //-----------------创建图象标签----------------------------
    m_TreeBootImage.Create ( IDB_TreeBootImage, 20, 1, ILC_COLOR8);
    m_ctrTree.SetImageList ( &m_TreeBootImage, TVSIL_NORMAL );
    m_ctrTree.SetTextColor (RGB(7,145,13)); //--------添加根目录----------------------------------------
    tvInsert.item.pszText = _T("我的世界");
    hParent = m_ctrTree.InsertItem(&tvInsert); //---------------添加子目录-------------------------------
    for (int i=0; i<m_arrayItem.size(); i++)
    {
    hPartItem = m_ctrTree.InsertItem(m_arrayItem[i].strRoomName.c_str(), hParent, NULL);
    m_ctrTree.SetItemData(hPartItem, i);
    AddSubTree(m_arrayItem[i], hPartItem);
    } //---------------------展开Tree目录------------------
    m_ctrTree.Expand(hParent,TVE_EXPAND);
    }void CDialogTest::AddSubTree(FI_Group_Room Room, HTREEITEM hPartItem)
    {
    HTREEITEM hItem = NULL;
    for (int i=0; i<Room.arraySipItem.size(); i++)
    {
    hItem = m_ctrTree.InsertItem(Room.arraySipItem[i].strUserName.c_str(), hPartItem, NULL);
    m_ctrTree.SetItemData(hItem, Room.arraySipItem[i].nUserID);
    }
    }
    运行后的截图如下:
      

  3.   

    如果你的image是24*1的,你的+-号会不会和你的图标一样大
      

  4.   

    很显然不一样大啊,你看我上面的截图就知道了啊,+-号大小是固定的,我上面测演示代码里面IMAGE图像是20*20的,这与24*24基本是一样的。
      

  5.   

    感觉上你的IMAGE图像在ImageList放大,你的+-号就会放大啊~
      

  6.   

    CDialogTest 里面的代码就是对应截图里面的那个Dialog内容。
    你自己换个24的图片就行了,然后把代码m_TreeBootImage.Create ( IDB_TreeBootImage, 20, 1, ILC_COLOR8);
    换成m_TreeBootImage.Create ( IDB_TreeBootImage, 24, 1, ILC_COLOR8);就可以了。
      

  7.   

    哪个CTreeCtrl上的加减号,你想要达到什么效果?