QQ登录

只需一步,快速开始

83上位机VC MFC树视图复选框功能添加

[ 复制链接 ]

83上位机VC MFC树视图复选框功能添加

83上位机VC MFC树视图复选框功能添加

83上位机VC MFC树视图复选框功能添加


功能展示

在树状视图的节点前面添加复选框的话,可以很方便用户对相关节点的检索操作,如何在树状视图上添加复选框功能?当前例程实现了这一功能,凡是用户选中的的树状视图上的节点,都可以被添加到右侧的编辑框中,效果如图
要点提示
树状视图控件有个CHECKBOXES属性,可以实现在树状节点前复选框,然后使用GetCheck()函数获取选中的状态;
实现功能
1.新建基于对话框的应用程序
2.添加两变量 CImageList m_TreeImageList; CStringm_sTex;//保存树状各节点文本信息;拖拽树状视图控件并关联变量CTreeCtrl  m_Tree;添加rich编辑框控件,关联变量CRichEditCtrl  m_Edit;;添加一按钮控件关联函数OnAdd() ;再添加两函数 void AddtoTree(HTREEITEM node,int UPID);//自定义函数
void AddFromTree(HTREEITEM m_node);//向编辑框添加节点数据

三个函数体为
  1. void CGkbc8Dlg::OnAdd()
  2. {
  3.         HTREEITEM item;
  4.         item = m_Tree.GetRootItem();
  5.         m_sTex="";
  6.         if(m_Tree.GetCheck(item)!=0)
  7.         {
  8.                 m_sTex+=m_Tree.GetItemText(item);
  9.                 m_sTex+="\n";
  10.                 m_Edit.SetWindowText(m_sTex);
  11.         }
  12.         AddFromTree(item);
  13. }
复制代码
  1. void CGkbc8Dlg::AddFromTree(HTREEITEM node)
  2. {
  3.         HTREEITEM child;
  4.         node = m_Tree.GetChildItem(node);
  5.         if (node != NULL)
  6.         {
  7.                 while (node!= NULL)
  8.                 {
  9.                         if(m_Tree.GetCheck(node)!=0)
  10.                         {
  11.                                 m_sTex+=m_Tree.GetItemText(node); m_sTex+="\n"; m_Edit.SetWindowText(m_sTex);
  12.                         }
  13.                         child = node; AddFromTree(child); node = m_Tree.GetNextItem(node,TVGN_NEXT);
  14.                 }
  15.         }
  16. }
  17. void CGkbc8Dlg::AddtoTree(HTREEITEM node,int UPID)
  18. {
  19.         HTREEITEM CHILDROOT;
  20.         for(int i=0;i<a_upid.GetSize();i++)
  21.         {
  22.                 if(UPID==atoi(a_upid.GetAt(i)))
  23.                 {
  24.                         switch(atoi(a_lx.GetAt(i)))
  25.                         {
  26.                                 case 1:
  27.                                         CHILDROOT = m_Tree.InsertItem(a_name.GetAt(i),2,2,node);
  28.                                         AddtoTree(CHILDROOT,atoi(a_id.GetAt(i))); break;
  29.                                 case 2:
  30.                                         CHILDROOT = m_Tree.InsertItem(a_name.GetAt(i),1,1,node);
  31.                                         AddtoTree(CHILDROOT,atoi(a_id.GetAt(i))); break;
  32.                                 case 3:
  33.                                         CHILDROOT = m_Tree.InsertItem(a_name.GetAt(i),3,3,node);
  34.                                         AddtoTree(CHILDROOT,atoi(a_id.GetAt(i))); break;
  35.                         }
  36.                 }
  37.         }
  38. }
复制代码
  1. 最后是初始化,从数据库加载数据
  2.         m_TreeImageList.Create(16,16,ILC_MASK,4,1);
  3.         m_TreeImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
  4.         m_TreeImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
  5.         m_TreeImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
  6.         m_Tree.SetImageList(&m_TreeImageList,LVSIL_NORMAL);
  7.         HTREEITEM ROOT;
  8.         ROOT=m_Tree.InsertItem("工控编程",0,0);
  9. //初始化数据库
  10.     _ConnectionPtr m_pConnection;//Connection对象的指针
  11.         _RecordsetPtr m_pRecordset;//Recordset对象的指针
  12.     ::CoInitialize(NULL);//初始化OLE/COM库环境
  13.         m_pConnection.CreateInstance("ADODB.Connection");//创建connection对象
  14.         _bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=database.mdb;";//设置连接字符串
  15.         m_pConnection->Open(strConnect,"","",adModeUnknown);//SERVER和UID,PWD的设置根据实际情况来设置

  16.         _bstr_t vSQL;
  17.         vSQL="SELECT*FROM fuxan ORDER BY id";//设置SQL语句
  18.         m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象
  19.     m_pRecordset->Open(vSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//取得表中的记录
  20. //加载数据

  21.         a_id.RemoveAll();
  22.         a_upid.RemoveAll();
  23.         a_lx.RemoveAll();
  24.         a_name.RemoveAll();
  25.         while(m_pRecordset->adoEOF==0)
  26.         {
  27.                 a_id.Add((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("id"));
  28.                 a_upid.Add((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("upid"));
  29.                 a_lx.Add((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("lx"));
  30.                 a_name.Add((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("name"));
  31.                 m_pRecordset->MoveNext();
  32.         }
  33.         m_pRecordset->Close();
  34.         m_pConnection->Close(); //将从数据库加载的数据添加到树状列表中
  35.     AddtoTree(ROOT,0);
  36.         m_Tree.Expand(ROOT,TVE_EXPAND);//展开
复制代码

数据库的操作得动态调用动态数据数据库文件#import "C:\Program Files\CommonFiles\System\ado\msado15.dll" no_namespacerename("EOF","adoEOF")rename("BOF","adoBOF")
另外CStringArraya_id;
CStringArray a_upid;
CStringArray a_lx;
CStringArray a_name;为全局变量;

图标得自己添加几个 rich edit编辑框的使用还得调用  AfxInitRichEdit();进行初始化操作;


我们来演示下功能实现过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:83.上位机VC MFC树视图复选框功能添加.rar 
文件大小:196.06 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索