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

2025-11-09 07:15:04

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是点后的 所以这就是点前点后不变

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

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

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

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢