MFC 树形控件 实现选择分组下面成员全选

来源:互联网 发布:d3.js 拓扑图 编辑:程序博客网 时间:2024/06/17 16:14
树形控件点击分组全选,取消一个,分组选择变暗1.添加树形控件给树形控件添加成员变量CTreeCtrlm_TripleTree;2.在头文件中添加变量HTREEITEM m_hTreeItem;3.再头文件中定义CImageList m_imList;4.在初始化中添加BOOL CTreeDlg::OnInitDialog(){CDialog::OnInitDialog();// TODO: Add extra initialization hereHICON hIcon[3];                             //图标m_imList.Create(16,16,0,3,3);               //hIcon[0]=AfxGetApp()->LoadIcon(IDI_ICON1);  //加载图标hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON2);hIcon[2]=AfxGetApp()->LoadIcon(IDI_ICON3);for(int n=0;n<3;n++)m_imList.Add(hIcon[n]);    m_TripleTree.SetImageList(&m_imList,TVSIL_NORMAL);TV_INSERTSTRUCT tvinsert;tvinsert.hParent=NULL;tvinsert.hInsertAfter=TVI_LAST;tvinsert.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT;tvinsert.item.hItem=NULL;tvinsert.item.state=0;tvinsert.item.stateMask=0;tvinsert.item.cchTextMax=6;tvinsert.item.iSelectedImage=0;tvinsert.item.cChildren=0;tvinsert.item.lParam=0;tvinsert.item.pszText="未分组";   // 树根tvinsert.item.iImage=0;HTREEITEM hCObject=m_TripleTree.InsertItem(&tvinsert);//second leveltvinsert.hParent=hCObject;//hCObjecttvinsert.item.iImage=0;tvinsert.item.pszText="张三";m_TripleTree.InsertItem(&tvinsert);//HTREEITEM hCCmdTarget=m_TripleTree.InsertItem(&tvinsert);tvinsert.hParent=hCObject;//hCObjecttvinsert.item.iImage=0;tvinsert.item.pszText="张三";m_TripleTree.InsertItem(&tvinsert);tvinsert.hParent=hCObject;//hCObjecttvinsert.item.iImage=0;tvinsert.item.pszText="张三";m_TripleTree.InsertItem(&tvinsert);tvinsert.hParent=hCObject;//hCObject    tvinsert.item.pszText="朋友";tvinsert.item.iImage=0;    m_TripleTree.InsertItem(&tvinsert);  tvinsert.hParent=hCObject;//hCObjecttvinsert.item.iImage=0;    tvinsert.item.pszText="好友";m_TripleTree.InsertItem(&tvinsert);tvinsert.item.pszText="同学";tvinsert.item.iImage=0;m_TripleTree.InsertItem(&tvinsert);/////////////////////////////////////////////////////////////////////////////////////////    tvinsert.hParent=NULL;tvinsert.item.pszText="未分组2";   // 树根tvinsert.item.iImage=0;HTREEITEM hCObject2=m_TripleTree.InsertItem(&tvinsert);//second leveltvinsert.hParent=hCObject2;//hCObjecttvinsert.item.iImage=0;tvinsert.item.pszText="张三";m_TripleTree.InsertItem(&tvinsert);tvinsert.hParent=hCObject2;//hCObjecttvinsert.item.iImage=0;tvinsert.item.pszText="王五";m_TripleTree.InsertItem(&tvinsert);///////////////////////////5.导入相应ICO图片(3个)6.给树形控件添加单击事件,并添加如下代码:如:void CTreeDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) {// TODO: Add your control notification handler code here UINT uFlags=0;HTREEITEM hPItem;CPoint point = GetCurrentMessage()->pt;ScreenToClient(&point);point.Offset(-8,-16);HTREEITEM hItem = m_TripleTree.HitTest(point, &uFlags);if ( (uFlags&TVHT_ONITEM) ){hPItem = m_TripleTree.GetParentItem(hItem);int m,n,m1,n1;    m_TripleTree.GetItemImage(hItem,m,n);        if(m!=1){  m_TripleTree.SetItemImage(hItem,1,1);      m_TripleTree.GetItemImage(hItem,m1,n1);  TravelChild(hItem, m1);  if(hPItem!=NULL)       TravelSiblingAndParent(hItem,m1);}     else //if(m==1) {m_TripleTree.SetItemImage(hItem,0,0);    m_TripleTree.GetItemImage(hItem,m1,n1);      TravelChild(hItem, m1);  if(hPItem!=NULL)TravelSiblingAndParent(hItem,m1); }//MessageBox("xxxx");}*pResult = 0;}7.添加TravelChild(HTREEITEM hItem, int m)成员函数如:void CTreeDlg::TravelChild(HTREEITEM hItem, int m){HTREEITEM hChildItem,hBrotherItem;hChildItem=m_TripleTree.GetChildItem(hItem);while(hChildItem!=NULL){ m_TripleTree.SetItemImage(hChildItem,m,m);     hChildItem=m_TripleTree.GetNextSiblingItem(hChildItem);}}8.添加TravelSiblingAndParent(HTREEITEM hItem, int m)成员函数如:void CTreeDlg::TravelSiblingAndParent(HTREEITEM hItem, int m){int m1,n1;int mark=0;HTREEITEM hNextSiblingItem,hPrevSiblingItem,hParentItem;m1=m;hNextSiblingItem=m_TripleTree.GetNextSiblingItem(hItem);//第一个while(hNextSiblingItem!=NULL){m_TripleTree.GetItemImage(hNextSiblingItem,m1,n1);if(m1!=m){mark=1;break;}else{hNextSiblingItem=m_TripleTree.GetNextSiblingItem(hNextSiblingItem);if(hNextSiblingItem!=NULL)m_TripleTree.GetItemImage(hNextSiblingItem,m1,n1);}}hPrevSiblingItem=m_TripleTree.GetPrevSiblingItem(hItem);//第一个while(hPrevSiblingItem!=NULL){m_TripleTree.GetItemImage(hPrevSiblingItem,m1,n1);if(m1!=m){mark=1;break;}else{hPrevSiblingItem=m_TripleTree.GetPrevSiblingItem(hPrevSiblingItem);if(hPrevSiblingItem!=NULL)m_TripleTree.GetItemImage(hPrevSiblingItem,m1,n1);}}if(m1!=m )  //有一个未被选中,j吧父节点去了{hParentItem=m_TripleTree.GetParentItem(hItem);while(hParentItem!=NULL){m_TripleTree.SetItemImage(hParentItem,2,2);//hParentItem=m_TripleTree.GetParentItem(hParentItem);}}if(m1==m&& mark==0)//权被选中{hParentItem=m_TripleTree.GetParentItem(hItem);while(hParentItem!=NULL){m_TripleTree.SetItemImage(hParentItem,m1,m1);hParentItem=m_TripleTree.GetParentItem(hParentItem);}}}运行:

原创粉丝点击