/** * 函数功能: 遍历树节点,存储节点信息 * 包括节点名字/节点是部门还是人员/节点深度遍历的编号 * * 说明: item的向下兄弟节点和子节点 */ void CTreeCtrlDlg::TraverseTree(CTreeCtrl &rTree, HTREEITEM item, vector<TREEITEMPRO> &rvecItem) { if (item == NULL) { return; } static int nSeq = 0; while (item != NULL) { // 存储节点信息 TREEITEMPRO tp; memset(&tp, 0x00, sizeof(TREEITEMPRO)); lstrcpyn(tp.szText, LPCTSTR(rTree.GetItemText(item)), MAXTEXTLEN); int nImage, nSelectedImage; rTree.GetItemImage(item, nImage, nSelectedImage); tp.emitem = (nImage == 0) ? emDep : emEmp; tp.nSeq = nSeq++; rvecItem.push_back(tp); if (rTree.GetChildItem(item)) {// 遍历孩子节点 item = rTree.GetChildItem(item); TraverseTree(rTree, item, rvecItem); // 遍历当前层兄弟节点 item = rTree.GetNextSiblingItem(rTree.GetParentItem(item)); } else {// 遍历当前层兄弟节点 item = rTree.GetNextSiblingItem(item); } } }