MFC treeview控件不同的节点显示不同的图标方法

TreeView 控件的主要属性包括 Nodes 和 SelectedNode。Nodes 属性包含树视图中的顶级节点列表。SelectedNode 属性设置当前选中的节点。您可以在节点旁边显示图标。该控件使用在树视图的 ImageList 属性中命名的 ImageList 中的图像。ImageIndex 属性可以设置树视图中节点的默认图像。

百度经验:jingyan.baidu.com

工具/原料

  • vc++6.0及MFC 类库

百度经验:jingyan.baidu.com

方法/步骤

  1. 1,用InsertItem 添加节点

    参数: 文字,图标,父节点

    返回: HTREEITEM

    示例: 添加一系列节点

    HTREEITEM hItem = m_Tree.InsertItem("root",NULL,NULL);///root就是节点的标题

    InsertItem函数的第一个参数就是设置他的节点标题

    2.,用ModifyStyle 设置风格

    参数: 取消的风格,增加的风格

    示例: 在对话框初始化时设置风格

    BOOL CMfc1Dlg::OnInitDialog()

    { //...

    m_Tree.ModifyStyle(NULL,TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);

    }

    3,用DeleteItem 删除节点

    4,用.DeleteAllItems 删除全部节点

    5.用Expand 展开/收缩节点

    参数: 节点HTREEITEM,展开/收缩

    示例: m_Tree.Expand(hItem,TVE_EXPAND

    如果你希望在每个结点前添加一个小图标,就必需先调用CImageList* SetImageList( CImageList * pImageList, int nImageListType );指明当前所使用的ImageList,nImageListType为TVSIL_NORMAL。在调用完成后控件中使用图片以设置的ImageList中图片为准。

    然后调用HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);添加结点,nImage为结点没被选中时所使用图片序号,nSelectedImage为结点被选中时所使用图片序号。

    下面的代码演示了ImageList的设置。

    /*m_list 为CImageList对象

    IDB_TREE 为16*(16*4)的位图,每个图片为16*16共4个图标*/

    m_list.Create(IDB_TREE,16,4,RGB(0,0,0));

    m_tree.SetImageList(&m_list,TVSIL_NORMAL);

    m_tree.InsertItem("Parent1",0,1);

    //添加,选中时显示图标1,未选中时显示图标0

  2. 示例代码:

    BOOL CTreeDlg::OnInitDialog ()

    SetIcon(m_hIcon, TRUE); // Set big icon

    SetIcon(m_hIcon, FALSE);后加入:

    /*************************得到图标文件的绝对**********************************/

    CString strFullName = AfxGetApp()->m_pszHelpFilePath;

    char drive[_MAX_DRIVE];

    char dir[_MAX_DIR];

    _splitpath(strFullName, drive, dir, NULL,NULL);

    CString strPath;

    strPath.Format("%s%s", drive, dir);

    /****************************得到图标文件的绝对*******************************/

    m_ImageList.Create(16,16,ILC_COLOR8|ILC_MASK,2,1);

    m_treectrl.SetImageList(&m_ImageList,TVSIL_NORMAL);

    SHFILEINFO fi;

    SHGetFileInfo(strPath+"gn.ico",0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON); //0

    m_ImageList.Add(fi.hIcon);

    SHGetFileInfo(strPath+"ap.ico",0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_OPENICON); //1

    m_ImageList.Add(fi.hIcon);

    SHGetFileInfo(strPath+"tree.ico",0,&fi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_OPENICON);//2

    m_ImageList.Add(fi.hIcon);

    HTREEITEM hroot,hspec,hclass;

    hroot= m_treectrl.InsertItem("学生成绩",0,0); 前一个0表示 点击前的图标 后一个0是点后的 所以这就是点前点后不变

    hspec=m_treectrl.InsertItem("专业",1,1,hroot);前一个1表示 点击前的图标 后一个1是点后的 所以这就是点前点后不变

    hclass=m_treectrl.InsertItem("20111",2,2,hspec);前一个2表示 点击前的图标 后一个2是点后的 所以这就是点前点后不变

    可以试下,加入源文件中如下图

  3. 运行后的treeview的效果图如下,愿大家成功,共同学习交流!

    MFC treeview控件不同的节点显示不同的图标方法
    END
百度经验:jingyan.baidu.com

注意事项

  • hroot= m_treectrl.InsertItem("学生成绩",0,0); 前一个0表示 点击前的图标 后一个0是点后的 所以这就是点前点后不变hspec=m_treectrl.InsertItem("专业",1,1,hroot);前一个1表示 点击前的图标 后一个1是点后的 所以这就是点前点后不变 hclass=m_treectrl.InsertItem("20111",2,2,hspec);前一个2表示 点击前的图标 后一个2是点后的 所以这就是点前点后不变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值