MFC树控件应用实例
来源:互联网 发布:淘宝店铺头像图片logo 编辑:程序博客网 时间:2024/05/17 21:51
1. 新建一名为“Tree”的对话框(Dialog based)应用程序项目(MFC AppWizard(EXE)),完成后的效果如下:
2. 将原有的一个标签(静态文本框)和两个命令按钮删除,然后往其中添加一个Tree Control,一个List Box,五个Button,完成后的效果如下图:
各控件属性见下表:
序号
属性
内容
备注
1
ID
IDC_TREE_INPUT
Tree Control
2
ID
IDC_LIST_OUTPUT
List Box
3
ID
Caption
IDC_BUTTON_Initialize
初始化&1
Button
4
ID
Caption
IDC_BUTTON_DeleteOne
删除一个&2
Button
5
ID
Caption
IDC_BUTTON_Clear
删除全部&3
Button
6
ID
Caption
IDC_BUTTON_ShowAll
浏览4
Button
7
ID
Caption
DC_BUTTON_Exit
退出&0
Button
3. 给其中的树形控件添加一类型为CTreeCtrl的成员变量m_ctrlTree,给其中的列表框控件添加一类型为CListBox的成员变量m_ctrlList,如下图:
4. 给其中的“初始化”按钮添加如下代码:
void CTreeDlg::OnBUTTONInitialize()
{
// TODO: Add your control notification handler code here
//在树控件中添加按钮和连线,添加TVS_HASLINES,TVS_LINESATROOT,TVS_HASBUTTONS风格
m_ctrlTree.ModifyStyle(0,TVS_LINESATROOT|TVS_HASBUTTONS|TVS_HASLINES);
m_ctrlTree.DeleteAllItems();
CString strText=_T("");
HTREEITEM hRoot=m_ctrlTree.InsertItem(_T("Root"));//插入树根
for(int i=0;i<4;i++)
{
strText.Format(_T("Item%d"),i);
HTREEITEM hParent=m_ctrlTree.InsertItem(strText,hRoot);//插入第二级内容
for(int j=0;j<5;j++)
{
strText.Format(_T("SubItem%d%d"),i,j);
m_ctrlTree.InsertItem(strText,hParent);//插入第三级内容
}
}
}
5. 给其中的“删除一个”按钮添加如下代码:
void CTreeDlg::OnBUTTONDeleteOne()
{
// TODO: Add your control notification handler code here
HTREEITEM hSel = m_ctrlTree.GetSelectedItem();
if(hSel==NULL)//没有选中节点
return;
else
if(m_ctrlTree.ItemHasChildren(hSel))//选中节点有子节点
{
CString strMessage = _T("当前选择的项包含子项,是否删除?");
if(MessageBox(strMessage,_T(""),MB_YESNO)== IDYES)
m_ctrlTree.DeleteItem(hSel);//删除子树
}
else
m_ctrlTree.DeleteItem(hSel);//删除单个节点
}
6. 给其中的“删除全部”按钮添加如下代码:
void CTreeDlg::OnBUTTONClear()
{
// TODO: Add your control notification handler code here
m_ctrlTree.DeleteAllItems();//清空树节点
}
7. 给其中的“退出”按钮添加如下代码:
void CTreeDlg::OnBUTTONExit()
{
// TODO: Add your control notification handler code here
EndDialog(NULL);
}
8. 找到并打开头文件TreeDlg.h,找到其中的类定义class CTreeDlg : public CDialog,给此类增加一成员函数如下:
void Search(HTREEITEM hParent,int nOffset)//用于查找的成员函数
{
CString strText=_T("");
HTREEITEM hChild=NULL;
hChild=m_ctrlTree.GetChildItem(hParent);
while(hChild!=NULL)
{
strText=m_ctrlTree.GetItemText(hChild);
for(int n=0;n<nOffset;n++)
{
strText.Insert(0,_T(""));
}
m_ctrlList.AddString(strText);
if(m_ctrlTree.ItemHasChildren(hChild))
{
Search(hChild,nOffset+1);
}
hChild=m_ctrlTree.GetNextItem(hChild,TVGN_NEXT);
}
}
9. 给其中的“浏览”按钮添加如下代码:
void CTreeDlg::OnBUTTONShowAll()
{
// TODO: Add your control notification handler code here
m_ctrlList.ResetContent();//清代列表框
HTREEITEM hRoot=m_ctrlTree.GetRootItem();//获取根节点
if(hRoot==NULL)//为空树
return;
else
{
CString strText=m_ctrlTree.GetItemText(hRoot);//获取节点文本
m_ctrlList.AddString(strText);
if(m_ctrlTree.ItemHasChildren(hRoot))
Search(hRoot,1);
}
}
10. 运行效果如下列图所示:
// TODO: Add extra validation here CTreeCtrl * pTree=(CTreeCtrl*)GetDlgItem(IDC_TREE); //pTree->SetImageList(&m_imageList,TVSIL_NORMAL);//为该树状控件设置图像列表 //TVS_HASBUTTONS == 在父项目中显示(+)或(-)。 //TVS_HASLINES == 在层次中用线条来连接各个项目名称。 //TVS_LINESATROOT == 在根目录下的项目也用线连接。 pTree->ModifyStyle(0,TVS_LINESATROOT|TVS_HASBUTTONS|TVS_HASLINES); //声明一个结构体,下面是对其所进行的初始化: TV_INSERTSTRUCT tvinsert; //hParent=父项目的句柄。如果该值为TVI_ROOTvalue或NULL,该项目插在树型视图的根部。 tvinsert.hParent=NULL; //hInsertAfter确定插入位置,可以取下面的值: //TVI_FIRST 插在列表的头部。 //TVI_LAST 插在列表的尾部。 //TVI_SORT 按字母顺序插入。 tvinsert.hInsertAfter=TVI_SORT; //mask用来指定TV_ITEM的哪些成员变量有效。 //譬如,如果指定了TVIF_TEXT,这意味着pszText成员变量是有效的。可以同时指定几个标志位。 tvinsert.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT; //hItem是树型视图项目的句柄。每一个项目都有它自己的句柄,如果要操作一个项目,就必须选择它的句柄。 tvinsert.item.hItem=NULL; tvinsert.item.state=0; tvinsert.item.stateMask=0; tvinsert.item.cchTextMax=6; //iImage和iSelectedImage用来指定图象列表以及一个索引号。 //这样就知道当项目被选中或没被选中时用哪个图象来表示该项目。 //像资源管理器中左边窗口中的文件夹等小图表就是有这两个参数来决定的。 tvinsert.item.iSelectedImage=1; tvinsert.item.cChildren=0; tvinsert.item.lParam=0;//lParam=指向结构体TV_INSERTSTRUCT的指针; //顶层的节点 tvinsert.item.pszText="Homer";//设置文本 tvinsert.item.iImage=2;//设置相关的图像列表中的图像 HTREEITEM hDad=pTree->InsertItem(&tvinsert);//加入到树的节点中 tvinsert.item.pszText="Marge"; HTREEITEM hMom=pTree->InsertItem(&tvinsert); //第二层的节点--父节点为hDaD tvinsert.hParent=hDad;//声明其父节点 tvinsert.item.pszText="Bart"; tvinsert.item.iImage=3; pTree->InsertItem(&tvinsert); tvinsert.item.pszText="Lisa";//只对需要改变的量进行改变就可以 pTree->InsertItem(&tvinsert); //第二层的节点--父节点为hMum tvinsert.hParent=hMom; tvinsert.item.pszText="Bart"; tvinsert.item.iImage=4; pTree->InsertItem(&tvinsert); tvinsert.item.pszText="Lisa"; pTree->InsertItem(&tvinsert); tvinsert.item.pszText="Dilbert"; HTREEITEM hOther=pTree->InsertItem(&tvinsert); //第三层节点--父节点为hOrher tvinsert.hParent=hOther; tvinsert.item.pszText="Dogbert"; tvinsert.item.iImage=7; pTree->InsertItem(&tvinsert); tvinsert.item.pszText="Ratbert"; pTree->InsertItem(&tvinsert);
- MFC树控件应用实例
- MFC树控件应用实例
- MFC控件应用
- MFC控件应用--CListCtrl
- MFC控件应用--CTreeCtrl
- MFC控件应用--CTabCtrl
- MFC-控件综合应用
- ext2.0树控件综合应用实例
- MFC控件实例之Slider Control实例
- MFC常用控件应用编程
- 标准MFC WinSock ActiveX控件开发实例
- 标准MFC WinSock ActiveX控件开发实例
- 标准MFC WinSock ActiveX控件开发实例
- 标准MFC WinSock ActiveX控件开发实例
- 5.MFC Tree控件使用基础实例
- DAO在MFC中的应用实例
- MFC MessageBox的一些应用实例
- MFC控件篇之对话框的应用
- 值得回顾的视频:Revolution OS [操作系统革命]
- 三种循环反汇编代码比较
- Building-a-Framework-for-Silverlight-Line-Of-Business-Applications
- 转:gbk, gb2312,big5,unicode,utf-8,utf-16的区别
- Linux中文件查找技术大全
- MFC树控件应用实例
- CentOS添加永久静态路由
- Java中的instanceof关键字(转)
- Thread
- MapBalanceReduce介绍
- 核心路由器的交换矩阵设计
- 安装程序的制作
- Visual Assist X最新版本 10.6.27
- 关于Java中的二维数组