树控件示例
来源:互联网 发布:u盘低格后数据恢复 编辑:程序博客网 时间:2024/06/06 07:44
设计界面如上:
本工程功能如下:
当工号、姓名、工资中输入数据后,并在树控件中选择一个二级节点后,把数据显示在列表中,并将数据写入新创建树节点目录文件中。
在树控件中选择一个二级节点后,将该节点对应文件夹数据输出到列表中
新建一个对话框工程,控件ID如下:
工号编辑框:IDC_EDIT_NUM
姓名编辑框:IDC_EDIT_NAME
工资编辑框:IDC_EDIT_SAL
树控件:IDC_TREE1 ,关联控件变量m_tree,
树控件设置属性:
Has buttons:节点有加减号按钮
Has Lines:子节点之间有虚线相连
Line at Root:根节点有虚线和其它相连
Show selection always:一直显示选中项
Border:有边框
列表控件:IDC_LIST1 ,关联控件变量m_list ,设置属性view:Report报表,Show selection always:True
添加按钮:IDC_BTN_ADD ,设置初始属性 Disabled:true不可用
路径静态文本框:IDC_STATIC_PATH
定义一个结构体以便文件读写操作:
struct SInfo
{
int nNum;
char sName[20];
float fSal;
};
在OnInitDialog中初始化树控件和列表控件:
m_list.InsertColumn(0,"工号",0,150);m_list.InsertColumn(1,"姓名",0,150);m_list.InsertColumn(2,"工资",0,150);//设置列表框扩展风格m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);//总节点HTREEITEM hRoot=m_tree.InsertItem("总公司");//添加一级节点,在总节点下HTREEITEM hItem=m_tree.InsertItem("一分公司",hRoot);//添加二级节点,在一级节点"一分公司"下m_tree.InsertItem("行政部",hItem);m_tree.InsertItem("市场部",hItem);m_tree.InsertItem("就业部",hItem);m_tree.Expand(hItem,TVE_EXPAND); //默认展开一级节点"一分公司"下的项hItem=m_tree.InsertItem("二分公司",hRoot);//添加二级节点,在一级节点"二分公司"下m_tree.InsertItem("行政部",hItem);m_tree.InsertItem("广告部",hItem);m_tree.InsertItem("市场部",hItem);m_tree.InsertItem("就业部",hItem);m_tree.Expand(hItem,TVE_EXPAND); //默认展开一级节点"二分公司"下的项m_tree.Expand(hRoot,TVE_EXPAND); //默认展开根节点下的项
添加小函数:
//获取选中节点的深度int CTreeTestDlg::GetDepth(HTREEITEM hItem){int i=0;while(hItem){//获取当前节点的父节点,赋给hItem//最终根节点返回1,一级节点返回2,二级节点返回3...hItem=m_tree.GetParentItem(hItem);i++;}return i;}
//获取选中节点的路径CString CTreeTestDlg::GetPaht(HTREEITEM hItem){CString str;while(hItem){str=m_tree.GetItemText(hItem)+'\\'+str;hItem=m_tree.GetParentItem(hItem); //获取父节点}return str;}
//单击不同的部门加载相应的数据输出到List中void CTreeTestDlg::LoadData(void){m_list.DeleteAllItems(); //清空列表框中的数据//获取树控件选中节点HTREEITEM hItem=m_tree.GetSelectedItem();int nDepth=GetDepth(hItem); //获取树节点深度if(nDepth!=3) //如果选中节点不是二级节点,返回return;CString szPath=GetPaht(hItem); //获取选中树节点目录CFile file;if(!file.Open(szPath+"memb.dat",CFile::modeRead))return;SInfo info;int i=0;CString str;while(file.Read(&info,sizeof(info))>0){str.Format("%d",info.nNum);m_list.InsertItem(i,str);m_list.SetItemText(i,1,info.sName);str.Format("%0.2f",info.fSal);m_list.SetItemText(i,2,str);i++;}file.Close();}
//创建文件夹BOOL CTreeTestDlg::MakeDir(CString &szPath){int i=0;while((i=szPath.Find('\\',i))>0)CreateDirectory(szPath.Left(i++),NULL);return TRUE;}
//将List中的数据写入树目录文件夹下的文件中void CTreeTestDlg::SaveData(void){CString szPath;GetDlgItemText(IDC_STATIC_PATH,szPath);//获得路径静态文本CString szFile=szPath+"memb.dat"; CFileFind ff;if(!ff.FindFile(szFile)) //查找文件memb.dat是否存在MakeDir(szPath); //创建文件夹CFile file;//以创建并写入的方式打开文件if(!file.Open(szFile,CFile::modeCreate | CFile::modeWrite)){MessageBox("保存时出错!");return ;}int i=0,nCount=m_list.GetItemCount();SInfo info;//将m_list中的数据写入文件中while(i<nCount){info.nNum=atoi(m_list.GetItemText(i,0));strcpy(info.sName,m_list.GetItemText(i,1));info.fSal=atof(m_list.GetItemText(i,2));file.Write(&info,sizeof(info));++i;}file.Close();//m_bFlag=FALSE;}
添加树控件消息响应函数:
void CTreeTestDlg::OnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult){LPNMTREEVIEW pTree = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);HTREEITEM hItem=pTree->itemNew.hItem; //获得当前选中树节点int nDepth=GetDepth(hItem); //获取选中树节点深度CString szNum,szName,szSal;GetDlgItemText(IDC_EDIT_NUM,szNum);GetDlgItemText(IDC_EDIT_NAME,szName);GetDlgItemText(IDC_EDIT_SAL,szSal);if(szNum!="" && szName!="" && szSal!="")//当文本框都输入了数据时{//如果选中的树节点是二级节点就激活“添加”按钮,否则禁用该按钮GetDlgItem(IDC_BTN_ADD)->EnableWindow(nDepth==3);}//将选择的树节点目录显示在静态文本框中SetDlgItemText(IDC_STATIC_PATH,GetPaht(hItem));LoadData(); //将当前选中树节点下文件的数据输出到List中*pResult = 0;}
“添加”按钮响应函数:
void CTreeTestDlg::OnBnClickedBtnAdd(){// TODO: 在此添加控件通知处理程序代码CString str;int i=0;//获得列表框数据行数int nCount=m_list.GetItemCount();GetDlgItemText(IDC_EDIT_NUM,str);//获取工号while(i<nCount){//检查工号是否存在if(m_list.GetItemText(i,0)==str){AfxMessageBox("工号已存在");return;}i++;}if(IDCANCEL==AfxMessageBox("添加数据到树目录文件夹吗?"))return;//将编辑框中的数据添加到List末尾m_list.InsertItem(nCount,str);GetDlgItemText(IDC_EDIT_NAME,str);m_list.SetItemText(nCount,1,str);GetDlgItemText(IDC_EDIT_SAL,str);m_list.SetItemText(nCount,2,str);//将List中的数据写入树目录文件夹下的文件中SaveData();//添加数据后清空编辑框,以便下次输入SetDlgItemText(IDC_EDIT_NUM,"");SetDlgItemText(IDC_EDIT_NAME,"");SetDlgItemText(IDC_EDIT_SAL,"");//禁用“添加”按钮GetDlgItem(IDC_BTN_ADD)->EnableWindow(FALSE);//m_bFlag=TRUE;}
看一下运行效果:
阅读全文
0 0
- 树控件示例
- 自定义控件-WebControl示例
- 复合控件制作示例
- FileUpload 服务器控件示例
- 日期控件及示例
- CComboBoxEx控件使用示例
- CComboBoxEx控件使用示例
- 制作服务器控件示例
- 自定义控件开发示例
- CComboBoxEx控件使用示例
- 用户控件简单示例
- C#用户控件示例
- Calendar控件应用示例
- listbox控件示例
- 数据库访问控件示例
- Grid控件使用示例
- QT提升控件示例
- 常用控件js示例
- 整数中1出现的次数
- 2017湘潭赛XTU1267Highway
- [模板]poj3259(判断是否存在负环)
- vi三种模式
- React-Native项目中使用TabBar
- 树控件示例
- Python
- 国内人脸识别研究现状2010年之前
- 马氏距离+协方差公式+无偏估计
- Codeforces Round #423 (Div. 2) B. Black Square
- hdu 1398 Square Coins 母函数+完全背包
- jenkins之安装篇
- java 访问权限
- svn版本控制