MFC 树形控件 实现选择分组下面成员全选
2012-10-28 23:05
543 查看
树形控件点击分组全选,取消一个,分组选择变暗 1.添加树形控件 给树形控件添加成员变量CTreeCtrl m_TripleTree; 2.在头文件中添加变量 HTREEITEM m_hTreeItem; 3.再头文件中定义 CImageList m_imList; 4.在初始化中添加 BOOL CTreeDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here HICON 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 ); 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 level tvinsert.hParent=hCObject;//hCObject tvinsert.item.iImage=0; tvinsert.item.pszText="张三"; m_TripleTree.InsertItem(&tvinsert); //HTREEITEM hCCmdTarget=m_TripleTree.InsertItem(&tvinsert); tvinsert.hParent=hCObject;//hCObject tvinsert.item.iImage=0; tvinsert.item.pszText="张三"; m_TripleTree.InsertItem(&tvinsert); tvinsert.hParent=hCObject;//hCObject tvinsert.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;//hCObject tvinsert.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 level tvinsert.hParent=hCObject2;//hCObject tvinsert.item.iImage=0; tvinsert.item.pszText="张三"; m_TripleTree.InsertItem(&tvinsert); tvinsert.hParent=hCObject2;//hCObject tvinsert.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); } } } 运行:
相关文章推荐
- GridView控件中添加CheckBox控件,并且实现选择、全选和反选
- MFC树形控件详细分析与代码实现
- 关于MFC中树形控件的多选实现
- 带有『选择次数排序』和『搜索』功能的树形控件设计与实现
- MFC中关于将控件与成员变量绑定,实现用子类重载控件
- MFC树形控件详细分析与代码实现
- CATIA二次开发CAA实现MFC树形控件的方法研究
- CATIA二次开发CAA实现MFC树形控件的方法研究
- JQuery实现下拉框的选择 与当CheckBox为服务器控件时如何获取值的操作,实现全选与删除
- JQuery实现下拉框的选择 与当CheckBox为服务器控件时如何获取值的操作,实现全选与删除
- GridView控件的选择功能,代码实现CheckBox控件的全选、反选以及取消
- MFC透明控件的超级简单实现--发布日期:2008-05-14 00:44
- 在MFC中使用Tab Control控件实现分页显示和跳转
- Devexpress treelist 树形控件 实现带三种状态的CheckBox
- android 实现图片选择拖拽控件
- 不用splitter控件 简单实现对mfc对话框的分割的方法
- MFC按钮控件Button按下和弹起事件实现示例
- 非MFC,利用window api OPENFILENAME实现文件夹选择
- ArcgisServer9.3 中矩形选择查询的实现(利用Ext控件的AJAX技术)
- MFC关于Radio Button控件选择的问题