www.gusucode.com > VC++树控件——动态树形菜单实例-源码程序 > VC++树控件——动态树形菜单实例-源码程序/code/TreeCtrlEx.cpp
//Download by http://www.NewXing.com // TreeCtrlEx.cpp : implementation file // #include "stdafx.h" #include "TreeCtrlEx.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // Added const int ROWNUM = 4; const int COLNUM = 4; //服务名称 char * const TREE_SERVICES[ROWNUM] = { "家人", //1 "朋友(0/3)", //2 "同事(0/3)", //3 "其它", //4 }; //子项目 char * const TREE_SERVICES_ITEMS[ROWNUM][COLNUM] = { {"","","",""},// 21 {"张大民","梁朝伟","周润发",""}, //11 {"Shaq","Lisa","Mark",""}, //31 {"","","",""}, //41 }; ///////////////////////////////////////////////////////////////////////////// // CTreeCtrlEx CTreeCtrlEx::CTreeCtrlEx() { } CTreeCtrlEx::~CTreeCtrlEx() { } BEGIN_MESSAGE_MAP(CTreeCtrlEx, CTreeCtrl) //{{AFX_MSG_MAP(CTreeCtrlEx) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTreeCtrlEx message handlers void CTreeCtrlEx::LoadItems() { int i,j; //树控制项目句柄 HTREEITEM hCur,hRoot; //插入数据项数据结构 TV_INSERTSTRUCT TCItem; //删除 //DeleteAllItems(); //获取树控制原风格 DWORD dwStyles = GetWindowLong(m_hWnd,GWL_STYLE); //设置新的风格 dwStyles |= TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_EDITLABELS; //设置风格 SetWindowLong(m_hWnd,GWL_STYLE,dwStyles); //增加根项 TCItem.hParent = TVI_ROOT; //在最后项之后 TCItem.hInsertAfter = TVI_LAST; //设屏蔽 TCItem.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE; TCItem.item.pszText = _T("联系人"); //序号 TCItem.item.lParam = 0; //正常图标 TCItem.item.iImage = 0; //选中时图标 TCItem.item.iSelectedImage = 0; //返回根项句柄 hRoot = InsertItem(&TCItem); for(i=0;i<ROWNUM;i++){ TCItem.hParent=hRoot; TCItem.item.pszText = TREE_SERVICES[i]; TCItem.item.lParam = (i+1)*10;//子项序号 hCur = InsertItem(&TCItem); for(j=0;j<COLNUM;j++){//增加各产品 if(TREE_SERVICES_ITEMS[i][j] == "") continue; TCItem.hParent=hCur; TCItem.item.pszText=TREE_SERVICES_ITEMS[i][j]; TCItem.item.lParam=(i+1)*10+(j+1);//子项序号 InsertItem(&TCItem); } } Expand(hRoot,TVE_EXPAND);//展开上一级树 } /*************************************************************** * * 名称:FindItem * * 功能:在树控制中根据数据项名称查找数据项 * * 参数:item - 要查询的数据项及其子数据项 * * strText - 要查询的数据项名称 * * 返回值:NULL - 没找到 * * (非空的HTREEITEM ) - 找到 * ***************************************************************/ HTREEITEM CTreeCtrlEx::FindItem(HTREEITEM item, CString strText) { HTREEITEM hFind; if(item == NULL) return NULL; while(item!=NULL) { if(GetItemText(item) == strText) return item; if(ItemHasChildren(item)) { item = GetChildItem(item); hFind = FindItem(item,strText); if(hFind) { return hFind; } else item= GetNextSiblingItem(GetParentItem(item)); } else { item = GetNextSiblingItem(item); if(item==NULL) return NULL; } } return item; }