void FileTransfer::ShowTreeViewItems(HWND hwnd, LPNMTREEVIEW m_lParam) { HANDLE m_handle; WIN32_FIND_DATA m_FindFileData; TVITEM tvi; TVINSERTSTRUCT tvins; char path[rfbMAX_PATH]; GetTVPath(GetDlgItem(hwnd, IDC_FTBROWSETREE), m_lParam->itemNew.hItem, path); strcat(path, "\\*"); while (TreeView_GetChild(GetDlgItem(hwnd, IDC_FTBROWSETREE), m_lParam->itemNew.hItem) != NULL) { TreeView_DeleteItem(GetDlgItem(hwnd, IDC_FTBROWSETREE), TreeView_GetChild(GetDlgItem(hwnd, IDC_FTBROWSETREE), m_lParam->itemNew.hItem)); } SetErrorMode(SEM_FAILCRITICALERRORS); m_handle = FindFirstFile(path, &m_FindFileData); SetErrorMode(0); if (m_handle == INVALID_HANDLE_VALUE) return; while(1) { if ((strcmp(m_FindFileData.cFileName, ".") != 0) && (strcmp(m_FindFileData.cFileName, "..") != 0)) { if (m_FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { tvi.mask = TVIF_TEXT; tvi.pszText = m_FindFileData.cFileName; tvins.hParent = m_lParam->itemNew.hItem; tvins.item = tvi; tvins.hParent = TreeView_InsertItem(GetDlgItem(hwnd, IDC_FTBROWSETREE), &tvins); TreeView_InsertItem(GetDlgItem(hwnd, IDC_FTBROWSETREE), &tvins); } } if (!FindNextFile(m_handle, &m_FindFileData)) break; } FindClose(m_handle); }
void ExtractAll() { TVITEM t; int i, nl; char *s; HTREEITEM hn, hm; FILE *log; //log = fopen("exalltest.txt", "w"); if(!file) return; nl = TreeView_GetCount(htree); t.mask = TVIF_PARAM; t.hItem = TreeView_GetChild(htree, TVI_ROOT); // First item for(i = 0; i < nl; i++) { TreeView_GetItem(htree, &t); s = GetItemPath(t.hItem); if(!s) {MessageBox(hwnd, "GetItemPath pathbuf overflow!", title, 16); break;} if(t.lParam != -1) { EnsureDirectoriesArePresent(s); ExtractFile(t.lParam, s); //fprintf(log, "FILE "); }//else fprintf(log, " DIR "); //fprintf(log, "%i: %s\n", i, s); hn = TreeView_GetChild(htree, t.hItem); if(!hn) hn = TreeView_GetNextSibling(htree, t.hItem); if(!hn) { hn = t.hItem; gns: hn = TreeView_GetParent(htree, hn); if(!hn) break; hm = TreeView_GetNextSibling(htree, hn); if(!hm) goto gns; hn = hm; } t.hItem = hn; } //fclose(log); }
//----------------------------------------------------------------------------- // ExcludePathsDlg_SetCheckState_r // // Propogate the check state to all children //----------------------------------------------------------------------------- void ExcludePathsDlg_SetCheckState_r( HWND hWndTree, HTREEITEM hTree, int depth, int checkState ) { if ( !hTree ) { return; } TreeView_SetCheckState( hWndTree, hTree, ( checkState == 1 ) ); TVITEM tvi = { 0 }; tvi.mask = TVIF_HANDLE | TVIF_CHILDREN; tvi.hItem = hTree; if ( TreeView_GetItem( hWndTree, &tvi ) ) { if ( tvi.cChildren ) { HTREEITEM hChild = TreeView_GetChild( hWndTree, hTree ); if ( hChild ) { ExcludePathsDlg_SetCheckState_r( hWndTree, hChild, depth+1, checkState ); } } } else { return; } if ( !depth ) { // only iterate siblings of the parent's child return; } HTREEITEM hSibling = hTree; while ( 1 ) { hSibling = TreeView_GetNextSibling( hWndTree, hSibling ); if ( !hSibling ) { return; } TreeView_SetCheckState( hWndTree, hSibling, ( checkState == 1 ) ); tvi.hItem = hSibling; if ( TreeView_GetItem( hWndTree, &tvi ) ) { if ( tvi.cChildren ) { HTREEITEM hChild = TreeView_GetChild( hWndTree, hSibling ); if ( hChild ) { ExcludePathsDlg_SetCheckState_r( hWndTree, hChild, depth+1, checkState ); } } } } }
void doItems(HWND hwnd2Tree, ModuleSettingLL *modlist, int count) { HWND hwnd = GetParent(hwnd2Tree); char percent[96], title[64]; mir_snprintf(title, SIZEOF(title), Translate("Loading modules...")); TVITEM item = {0}; item.mask = TVIF_STATE | TVIF_PARAM; HTREEITEM contact = TreeView_GetChild(hwnd2Tree, TVI_ROOT); contact = TreeView_GetNextSibling(hwnd2Tree, contact); contact = TreeView_GetChild(hwnd2Tree, contact); MCONTACT hContact = 0; for (int i = 1; contact && hwnd2mainWindow; i++) { item.hItem = contact; contact = TreeView_GetNextSibling(hwnd2Tree, contact); if (TreeView_GetItem(hwnd2Tree, &item) && item.lParam) { ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)item.lParam; hContact = mtis->hContact; if (hContact == NULL || mtis->type != (CONTACT | EMPTY)) continue; mtis->type = CONTACT; } else continue; // Caption mir_snprintf(percent, SIZEOF(percent), "%s %d%%", title, (int)(100 * i / count)); SetWindowText(hwnd, percent); for (ModSetLinkLinkItem *module = modlist->first; module && hwnd2mainWindow; module = module->next) { if (!module->name[0] || IsModuleEmpty(hContact, module->name)) continue; TVINSERTSTRUCT tvi; tvi.hParent = item.hItem; tvi.hInsertAfter = TVI_SORT; tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.item.pszText = module->name; ModuleTreeInfoStruct *lParam = (ModuleTreeInfoStruct *)mir_calloc(sizeof(ModuleTreeInfoStruct)); lParam->hContact = hContact; tvi.item.iImage = 1; tvi.item.iSelectedImage = 2; lParam->type = KNOWN_MODULE; tvi.item.lParam = (LPARAM)lParam; TreeView_InsertItem(hwnd2Tree, &tvi); } } SetWindowText(hwnd, TranslateT("Database Editor++")); }
VOID FreeDeviceStrings(HWND hTreeView) { HTREEITEM hItem; hItem = TreeView_GetRoot(hTreeView); if (hItem) { hItem = TreeView_GetChild(hTreeView, hItem); /* loop the parent items */ while (hItem) { hItem = TreeView_GetChild(hTreeView, hItem); if (hItem == NULL) break; /* loop the child items and free the DeviceID */ while (TRUE) { HTREEITEM hOldItem; TV_ITEM tvItem; //TCHAR Buf[100]; tvItem.hItem = hItem; tvItem.mask = TVIF_PARAM;// | TVIF_TEXT; //tvItem.pszText = Buf; //tvItem.cchTextMax = 99; (void)TreeView_GetItem(hTreeView, &tvItem); //MessageBox(NULL, Buf, NULL, 0); HeapFree(GetProcessHeap(), 0, (LPTSTR)tvItem.lParam); hOldItem = hItem; hItem = TreeView_GetNextSibling(hTreeView, hItem); if (hItem == NULL) { hItem = hOldItem; break; } } hItem = TreeView_GetParent(hTreeView, hItem); hItem = TreeView_GetNextSibling(hTreeView, hItem); } } }
void TreeViewFindCheck(HTREEITEM parent,bool force) { TVITEM tvItem; bool lforce; ZeroMemory(&tvItem,sizeof(TVITEM)); HTREEITEM locHti,tmpHti; wchar_t buff[2048]; wmemset(buff,'\0',2048); if (parent==NULL) { locHti=TreeView_GetRoot(App.hTreeView); } else { locHti=TreeView_GetChild(App.hTreeView,parent); } do { lforce=false; tvItem.mask = TVIF_HANDLE | TVIF_TEXT; tvItem.hItem = locHti; tvItem.pszText = buff; tvItem.cchTextMax = 2048; TreeView_GetItem(App.hTreeView,&tvItem); if (TreeView_GetCheckState(App.hTreeView,locHti)==1 || force) { switch (tvItem.lParam) { case 10: semafor=1; //TreeView_Select(App.hTreeView,locHti,TVGN_CARET); //TreeView_Expand(App.hTreeView,locHti,TVE_EXPAND); _beginthreadex(NULL,0,ThreadScanFolder,(void *)locHti,0,NULL); lforce=TRUE; while (semafor==1) {Sleep(100);} break; case 20: semafor=1; //TreeView_Select(App.hTreeView,locHti,TVGN_CARET); //TreeView_Expand(App.hTreeView,locHti,TVE_EXPAND); _beginthreadex(NULL,0,ThreadScanFile,(void *)locHti,0,NULL); lforce=TRUE; while (semafor==1) {Sleep(100);} break; } } if (tmpHti=TreeView_GetChild(App.hTreeView,locHti)) { TreeViewFindCheck(locHti,lforce); } } while(locHti=TreeView_GetNextSibling(App.hTreeView,locHti)); }
void freeTree(HWND hwnd2Tree, MCONTACT hContact) { TVITEM item; HTREEITEM lastItem; if (!TreeView_GetCount(hwnd2Tree)) return; item.mask = TVIF_STATE | TVIF_PARAM; item.hItem = TVI_ROOT; do { do { lastItem = item.hItem; if (lastItem != TVI_ROOT) { TreeView_GetItem(hwnd2Tree, &item); /* these next 2 lines are not from code guru..... */ if (item.lParam) { ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)item.lParam; if (!hContact || (hContact == mtis->hContact)) { if (hContact != NULL) { TreeView_DeleteItem(hwnd2Tree, item.hItem); mir_free(mtis); } else mtis->type = STUB; } } /* back to coduguru's code*/ } } while (item.hItem = TreeView_GetChild(hwnd2Tree, lastItem)); while (!(item.hItem = TreeView_GetNextSibling(hwnd2Tree, lastItem)) && (lastItem = item.hItem = TreeView_GetParent(hwnd2Tree, lastItem))) {} } while (item.hItem); }
static HTREEITEM _treeview_getitemfrompath(HWND treeview, HTREEITEM parent, char *path) { char *fname, name[BUFSIZE], iname[BUFSIZE]; HTREEITEM child; if (!path || path[0] == '\0') return parent; memset(name, 0, BUFSIZE); fname = firstname(path); memmove(name, path, fname - path); child = TreeView_GetChild(treeview, parent); if (!child) return parent; do { treeview_getitemname(treeview, child, iname, BUFSIZE); if (!strcmp(name, iname)) { if (!fname[0]) return child; else return _treeview_getitemfrompath(treeview, child, fname + 1); }; } while (child = TreeView_GetNextSibling(treeview, child)); return NULL; };
int findItemInTree(HWND hwnd2Tree, MCONTACT hContact, char *module) { TVITEM item; char text[265]; HTREEITEM lastItem; if (!TreeView_GetCount(hwnd2Tree)) return 0; item.mask = TVIF_STATE | TVIF_PARAM | TVIF_TEXT; item.hItem = TVI_ROOT; item.pszText = text; item.cchTextMax = 264; do { do { lastItem = item.hItem; if (lastItem != TVI_ROOT) { /* these next 2 lines are not from code guru..... */ if (TreeView_GetItem(hwnd2Tree, &item) && item.lParam) { if ((hContact == ((ModuleTreeInfoStruct *)item.lParam)->hContact) && (!module[0] || !mir_strcmp(module, text))) { //TreeView_SelectItem(hwnd2Tree,item.hItem); return (int)item.hItem; } } /* back to coduguru's code*/ } } while ((item.hItem = TreeView_GetChild(hwnd2Tree, lastItem))); while ((!(item.hItem = TreeView_GetNextSibling(hwnd2Tree, lastItem))) && (lastItem = item.hItem = TreeView_GetParent(hwnd2Tree, lastItem))); } while (item.hItem); return -1; }
void tvisual::on_rclick(LPNMHDR lpNMHdr, HTREEITEM htvi) { TVITEMEX tvi; if (type_ == BIN_WML) { TreeView_GetItem1(lpNMHdr->hwndFrom, htvi, &tvi, TVIF_CHILDREN, NULL); if (tvi.cChildren && !TreeView_GetChild(lpNMHdr->hwndFrom, htvi)) { std::vector<std::pair<LPARAM, std::string> > vec; LPARAM cfg_index; const config* cfg = &game_config_; TreeView_FormVector(lpNMHdr->hwndFrom, htvi, vec); for (std::vector<std::pair<LPARAM, std::string> >::reverse_iterator ritor = vec.rbegin(); ritor != vec.rend(); ++ ritor) { if (ritor == vec.rbegin()) { continue; } cfg_index = 0; foreach (const config::any_child& value, cfg->all_children_range()) { if (cfg_index ++ == ritor->first) { cfg = &value.cfg; break; } } } wml_2_tv(lpNMHdr->hwndFrom, htvi, *cfg, 0); }
static void TreeItemForPageNoRec(WindowInfo *win, HTREEITEM hItem, int pageNo, HTREEITEM& bestMatchItem, int& bestMatchPageNo) { while (hItem && bestMatchPageNo < pageNo) { TVITEM item; item.hItem = hItem; item.mask = TVIF_PARAM | TVIF_STATE; item.stateMask = TVIS_EXPANDED; TreeView_GetItem(win->hwndTocTree, &item); // remember this item if it is on the specified page (or on a previous page and closer than all other items) if (item.lParam) { int page = ((DocTocItem *)item.lParam)->pageNo; if (page <= pageNo && page >= bestMatchPageNo && page >= 1) { bestMatchItem = hItem; bestMatchPageNo = page; } } // find any child item closer to the specified page HTREEITEM hSubItem = nullptr; if ((item.state & TVIS_EXPANDED)) TreeItemForPageNoRec(win, TreeView_GetChild(win->hwndTocTree, hItem), pageNo, bestMatchItem, bestMatchPageNo); hItem = TreeView_GetNextSibling(win->hwndTocTree, hItem); } }
// @fSubLeaf: 是否要遍子下级以及更下级叶子 // 遍历(hctl, htvi)叶子下的所有叶子, 分别调用fn. // 注: // 1. 调用函数中不要去删除本叶子,要删除使用函数给的fDelete置TRUE void TreeView_Walk(HWND hctl, HTREEITEM htvi, BOOL fSubLeaf, fn_treeview_walk fn, uint32_t *ctx, BOOL fDelete) { HTREEITEM hChildTreeItem = NULL; HTREEITEM hPrevChildTreeItem; hChildTreeItem = TreeView_GetChild(hctl, htvi); while (hChildTreeItem) { // // Call the fn on the node itself. // if (fSubLeaf) { TreeView_Walk(hctl, hChildTreeItem, fSubLeaf, fn, ctx); } if (fn) { fn(hctl, hChildTreeItem, ctx); } hPrevChildTreeItem = hChildTreeItem; hChildTreeItem = TreeView_GetNextSibling(hctl, hChildTreeItem); if (fDelete) { TreeView_DeleteItem(hctl, hPrevChildTreeItem); } } return; }
LRESULT CBrowseDocker::OnRefresh(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { if (m_rightClickNode != NULL) { HTREEITEM hChild = TreeView_GetChild(m_view->m_hWnd, m_rightClickNode); if (hChild) { bool expanded = (TreeView_GetItemState(m_view->m_hWnd, m_rightClickNode, TVIS_EXPANDED) & TVIS_EXPANDED) == TVIS_EXPANDED; TreeView_Expand(m_view->m_hWnd, m_rightClickNode, TVE_COLLAPSERESET | TVE_COLLAPSE); /*while(hChild) { TreeView_DeleteItem(m_view->m_hWnd, hChild); hChild = TreeView_GetChild(m_view->m_hWnd, m_rightClickNode); }*/ if (expanded) { TreeView_Expand(m_view->m_hWnd, m_rightClickNode, TVE_EXPAND); } } } return 0; }
bool CFileGroups::AddFile(HWND hwndTVCtrl, HTREEITEM hGroup, const char *filepath) { _ASSERTE(hGroup != NULL); _ASSERTE(filepath != 0); _ASSERTE(qfileexist(filepath)); if (hGroup == NULL || filepath == 0 || !qfileexist(filepath)) return false; for (HTREEITEM hChild = TreeView_GetChild(hwndTVCtrl, hGroup); hChild != NULL; hChild = TreeView_GetNextSibling(hwndTVCtrl, hChild)) { char text[MAX_PATH]; TVITEMEX tvi; tvi.mask = TVIF_HANDLE | TVIF_TEXT; tvi.hItem = hGroup; tvi.pszText = text; tvi.cchTextMax = sizeof text; if (TreeView_GetItem(hwndTVCtrl, &tvi)) { if (_stricmp(filepath, text) == 0) return false; // no dupes! } #ifdef _DEBUG else _RPTF4(_CRT_ERROR, "%s(%08X, ..., \"%s\"): TreeView_GetItem(%08X, ...) returned NULL", __FUNCTION__, hwndTVCtrl, filepath, hwndTVCtrl); #endif // _DEBUG } TVINSERTSTRUCT tvis; tvis.hParent = hGroup; tvis.hInsertAfter = TVI_SORT; tvis.itemex.mask = TVIF_TEXT; tvis.itemex.pszText = const_cast<LPTSTR>(filepath); const HTREEITEM hti(TreeView_InsertItem(hwndTVCtrl, &tvis)); _ASSERTE(hti != NULL); return hti != NULL; }
static HTREEITEM TreeItemForPageNo(WindowInfo *win, HTREEITEM hItem, int pageNo) { HTREEITEM hCurrItem = nullptr; while (hItem) { TVITEM item; item.hItem = hItem; item.mask = TVIF_PARAM | TVIF_STATE; item.stateMask = TVIS_EXPANDED; TreeView_GetItem(win->hwndTocTree, &item); // return if this item is on the specified page (or on a latter page) if (item.lParam) { int page = ((DocTocItem *)item.lParam)->pageNo; if (1 <= page && page <= pageNo) hCurrItem = hItem; if (page >= pageNo) break; } // find any child item closer to the specified page HTREEITEM hSubItem = nullptr; if ((item.state & TVIS_EXPANDED)) hSubItem = TreeItemForPageNo(win, TreeView_GetChild(win->hwndTocTree, hItem), pageNo); if (hSubItem) hCurrItem = hSubItem; hItem = TreeView_GetNextSibling(win->hwndTocTree, hItem); } return hCurrItem; }
BBTreeViewNode *Win32TreeViewNode::insert( int index,BBString *str,int icon ){ HTREEITEM p; if( index<=0 ){ p=TVI_FIRST; }else if( index>=countKids() ){ p=TVI_LAST; }else{ p=TreeView_GetChild( _tree,_item ); while( --index ){ p=TreeView_GetNextSibling( _tree,p ); } } TVINSERTSTRUCT it; it.hParent=_item; it.hInsertAfter=p; it.item.mask=TVIF_TEXT; it.item.pszText=(char*)str->c_str(); HTREEITEM item=TreeView_InsertItem( _tree,&it ); if( !item ) return 0; Win32TreeViewNode *node=new Win32TreeViewNode( _tree,item,this ); TVITEM tv={TVIF_PARAM}; tv.hItem=item; tv.lParam=(LPARAM)node; if (icon>-1) {tv.mask|=TVIF_IMAGE|TVIF_SELECTEDIMAGE;tv.iImage=icon;tv.iSelectedImage=icon+0;} TreeView_SetItem( _tree,&tv ); return node; }
LRESULT FullStackOnCollapse( __in HWND hWnd, __in UINT uMsg, __in WPARAM wp, __in LPARAM lp ) { PDIALOG_OBJECT Object; PFULLSTACK_CONTEXT Context; PTREELIST_OBJECT TreeList; HTREEITEM hItem; Object = (PDIALOG_OBJECT)SdkGetObject(hWnd); Context = SdkGetContext(Object, FULLSTACK_CONTEXT); TreeList = Context->Base.TreeList; ASSERT(TreeList != NULL); hItem = TreeView_GetChild(TreeList->hWndTree, TVI_ROOT); while (hItem != NULL) { TreeView_Expand(TreeList->hWndTree, hItem, TVE_COLLAPSE); hItem = TreeView_GetNextSibling(TreeList->hWndTree, hItem); } return 0; }
void StoreTreeNode(HWND hTree, HTREEITEM node, char * section) { HTREEITEM tmp; tmp=node; while (tmp) { HTREEITEM tmp2=NULL; TVITEMA tvi; char buf[255]; tvi.hItem=tmp; tvi.mask=TVIF_TEXT|TVIF_HANDLE; tvi.pszText=(LPSTR)&buf; tvi.cchTextMax=254; TreeView_GetItemA(hTree,&tvi); if (tvi.lParam) { OPT_OBJECT_DATA * dat =(OPT_OBJECT_DATA*)(tvi.lParam); if (dat->szName && dat->szValue) ModernWriteSettingString(NULL,section,dat->szName,dat->szValue); } tmp2=TreeView_GetChild(hTree,tmp); if (tmp2) StoreTreeNode(hTree,tmp2,section); tmp=TreeView_GetNextSibling(hTree,tmp); } return; }
HTREEITEM OptTree_FindNamedTreeItemAt(HWND hwndTree, HTREEITEM hItem, const TCHAR *name) { TVITEM tvi = {0}; TCHAR str[MAX_PATH]; if (hItem) tvi.hItem = TreeView_GetChild(hwndTree, hItem); else tvi.hItem = TreeView_GetRoot(hwndTree); if (!name) return tvi.hItem; tvi.mask = TVIF_TEXT; tvi.pszText = str; tvi.cchTextMax = MAX_PATH; while (tvi.hItem) { TreeView_GetItem(hwndTree, &tvi); if (!lstrcmp(tvi.pszText, name)) return tvi.hItem; tvi.hItem = TreeView_GetNextSibling(hwndTree, tvi.hItem); } return NULL; }
void OptTree_Translate(HWND hwndTree) { HTREEITEM hItem = TreeView_GetRoot(hwndTree); while (hItem) { HTREEITEM hItemTmp = 0; OptTree_TranslateItem(hwndTree, hItem); if (hItemTmp = TreeView_GetChild(hwndTree, hItem)) { hItem = hItemTmp; } else if (hItemTmp = TreeView_GetNextSibling(hwndTree, hItem)) { hItem = hItemTmp; } else { while (1) { if (!(hItem = TreeView_GetParent(hwndTree, hItem))) break; if (hItemTmp = TreeView_GetNextSibling(hwndTree, hItem)) { hItem = hItemTmp; break; } } } } }
//------------------------------------------------------------------------------ static int Calc_Folder_(HTREEITEM hitem, char *Name_Dir, char *NameFo, int pr)//Вычисления для копирование выбранной папки на диск ПК { HTREEITEM ind = TreeView_GetChild(hwndTree, hitem); //Вошли во внутренний уровень дерева if(ind == NULL) if(pr == 0) return Error1((Lan+92)->msg); //if(pr == 0) return Error1("В указанной папке нет файлов для копирования."); else return 0; //Для вложенных пустых папок ничего не делаем char nName_Dir[512]; //Суммарный путь lstrcpy(nName_Dir, Name_Dir); lstrcat(nName_Dir, "\\"); lstrcat(nName_Dir, NameFo); for(;;) //Просмотр всего дерева от текущей папки { TV_ITEM item; char Msg[100]; item.mask = TVIF_TEXT | TVIF_PARAM; item.hItem = ind; item.pszText = Msg; item.cchTextMax = 100; if(TreeView_GetItem(hwndTree, &item) == FALSE) return Error1((Lan+33)->msg); //return Error1("Ошибка при запросе информации об элементе дерева."); if((aTree + item.lParam)->pf.type == 48 || //Очередное имя это папка (aTree + item.lParam)->pf.type == 47) //Данное имя это специальная папка { if(Calc_Folder_(ind, nName_Dir, (aTree + item.lParam)->NameF, ++pr) < 0) return -1; }//Вычисления для копирование выбранной папки на диск ПК else //Очередное имя это файл { numAllInCl += DWORD(((aTree + item.lParam)->pf.SizeF + sCl_B - 1) / sCl_B); //Суммарное число кластеров во всех копируемых файлах numAllOutCl += ((aTree + item.lParam)->pf.SizeF + BytesPerClaster - 1) / BytesPerClaster; //Суммарный число выходных кластеров numAllFi++; //Число копируемых файлах } ind = TreeView_GetNextSibling(hwndTree, ind); //Следующая запись на том же уровне дерева if(ind == NULL) break; //Больше записей данного уровня нет } return 0;
HTREEITEM IGetNextTreeItem( HWND tree, HTREEITEM item ) { // First try child items of this one HTREEITEM next = TreeView_GetChild( tree, item ); if( next == nil ) // If no child items, try next sibling next = TreeView_GetNextSibling( tree, item ); if( next == nil ) { // If no siblings, go up to the parent and keep searching until we find a parent with a sibling next = item; while( true ) { next = TreeView_GetParent( tree, next ); if( next == nil ) { // No parent; not found, so stop break; } else if( TreeView_GetNextSibling( tree, next ) != nil ) { next = TreeView_GetNextSibling( tree, next ); break; } } } return next; }
void TraverseChildren(const HTREEITEM hParent, TString &buf, TString &res, LPTVITEMEX pitem) { ZeroMemory(pitem, sizeof(TVITEMEX)); for (HTREEITEM ptvitem = TreeView_GetChild(Dcx::mIRC.getTreeview(), hParent); ptvitem != NULL; ptvitem = TreeView_GetNextSibling(Dcx::mIRC.getTreeview(), ptvitem)) { pitem->hItem = ptvitem; pitem->pszText = buf.to_chr(); pitem->cchTextMax = MIRC_BUFFER_SIZE_CCH; pitem->mask = TVIF_TEXT|TVIF_PARAM; if (TreeView_GetItem(Dcx::mIRC.getTreeview(), pitem)) { { TString tsType; DcxDock::getTreebarItemType(tsType, pitem->lParam); Dcx::mIRC.execex("/!set -nu1 %%dcx_%d %s", pitem->lParam, pitem->pszText ); Dcx::mIRC.tsEvalex(res, "$xtreebar_callback(geticons,%s,%%dcx_%d)", tsType.to_chr(), pitem->lParam); } pitem->mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE; int i = res.gettok( 1 ).to_int() -1; if (i < 0) i = 0; pitem->iImage = i; i = res.gettok( 2 ).to_int() -1; if (i < 0) i = 0; pitem->iSelectedImage = i; TreeView_SetItem(Dcx::mIRC.getTreeview(), pitem); } TraverseChildren(ptvitem, buf, res, pitem); } }
void CWindowTreeDlg::SelectTreeItem(HWND windowHwnd) { HWND _windowTreeHwnd = GetDlgItem(*this, IDC_WINDOWTREE); HTREEITEM actualItem = TreeView_GetFirstVisible(_windowTreeHwnd); // Search by the item into the list while (actualItem != NULL) { TVITEM tvi = {0}; tvi.hItem = actualItem; tvi.mask = TVIF_PARAM; TreeView_GetItem(_windowTreeHwnd, &tvi); // If it is the item, select it and break the search if ((HWND)tvi.lParam == windowHwnd) { TreeView_SelectItem(_windowTreeHwnd, actualItem); break; } // Find the next item in the TreeView HTREEITEM nextItem = TreeView_GetChild(_windowTreeHwnd, actualItem); if (nextItem == NULL) nextItem = TreeView_GetNextSibling(_windowTreeHwnd, actualItem); HTREEITEM parentItem = actualItem; while ((nextItem == NULL) && (parentItem != NULL)) { parentItem = TreeView_GetParent(_windowTreeHwnd, parentItem); nextItem = TreeView_GetNextSibling(_windowTreeHwnd, parentItem); } actualItem = nextItem; } }
HTREEITEM plComponentDlg::ISearchTree(HWND hTree, LPARAM lParam, HTREEITEM hCur) { // Get the param for the current item TVITEM tvi; tvi.mask = TVIF_PARAM; tvi.hItem = hCur; TreeView_GetItem(hTree, &tvi); // If the lParam matches the one searching for, return the handle if (tvi.lParam == lParam) return hCur; // Do a recursive search on the items children HTREEITEM hChild = TreeView_GetChild(hTree, hCur); while (hChild) { HTREEITEM hResult = ISearchTree(hTree, lParam, hChild); if (hResult) return hResult; hChild = TreeView_GetNextSibling(hTree, hChild); } return NULL; }
void CSubclassedCopyMoveDlg::AfterInitDialog() { HWND hTreeCtrl = _GetTreeCtrl(); if (!hTreeCtrl) { // wrong dialog? PostMessage(WM_COMMAND, IDCANCEL, 0); return; } HTREEITEM hRoot = TreeView_GetRoot(hTreeCtrl); HTREEITEM hLocalFolders = COETricks::m_bVista ? hRoot : TreeView_GetChild(hTreeCtrl, hRoot); if (!hLocalFolders) { PostMessage(WM_COMMAND, IDCANCEL, 0); // dunno what happened return; } FOLDERS_LIST arrFolders; _EnumFolders(hTreeCtrl, hLocalFolders, arrFolders); // select our target folder // then press OK FOLDERS_LIST::const_iterator it = arrFolders.find(m_dwFolderID); if (it == arrFolders.end()) { // there's no love... PostMessage(WM_COMMAND, IDCANCEL, 0); return; } TreeView_SelectItem(hTreeCtrl, it->second); PostMessage(WM_COMMAND, IDOK, 0); }
bool CSubclassedCopyMoveDlg::_EnumFolders(HWND hTreeCtrl, HTREEITEM hRootFolder, OUT FOLDERS_LIST& arrFolders) { TreeView_Expand(hTreeCtrl, hRootFolder, TVE_EXPAND); // to prevent the infamous crash HTREEITEM hCurFolder = TreeView_GetChild(hTreeCtrl, hRootFolder); if (!hCurFolder) return false; for (; hCurFolder; hCurFolder = TreeView_GetNextSibling(hTreeCtrl, hCurFolder)) { TCHAR szBuf[256]; TVITEM item; item.hItem = hCurFolder; item.mask = TVIF_TEXT | TVIF_PARAM; item.pszText = szBuf; item.cchTextMax = 256; TreeView_GetItem(hTreeCtrl, &item); CTLeafInfo LeafInfo((void *)item.lParam); if(LeafInfo.IsNull()) continue; arrFolders[LeafInfo.GetFolderId()] = hCurFolder; _EnumFolders(hTreeCtrl, hCurFolder, arrFolders); } return true; }
// returns false if we should stop iteration // TODO: convert to non-recursive version by storing nodes to visit in std::deque static bool VisitTreeNodesRec(HWND hwnd, HTREEITEM hItem, const TreeItemVisitor& visitor) { while (hItem) { TVITEMW item = {0}; item.hItem = hItem; item.mask = TVIF_PARAM | TVIF_STATE; item.stateMask = TVIS_EXPANDED; BOOL ok = TreeView_GetItem(hwnd, &item); if (!ok) { // we failed to get the node, but we don't want to stop the traversal return true; } bool shouldContinue = visitor(&item); if (!shouldContinue) { // visitor asked to stop return false; } if ((item.state & TVIS_EXPANDED)) { HTREEITEM child = TreeView_GetChild(hwnd, hItem); VisitTreeNodesRec(hwnd, child, visitor); } hItem = TreeView_GetNextSibling(hwnd, hItem); } return true; }
bool ShellBrowserChild::select_folder(ShellDirectory* dir, bool expand) { CONTEXT("ShellBrowserChild::expand_folder()"); if (!_last_sel) return false; if (!TreeView_Expand(_left_hwnd, _last_sel, TVE_EXPAND)) return false; for(HTREEITEM hitem=TreeView_GetChild(_left_hwnd,_last_sel); hitem; hitem=TreeView_GetNextSibling(_left_hwnd,hitem)) { if ((ShellDirectory*)TreeView_GetItemData(_left_hwnd,hitem) == dir) { if (TreeView_SelectItem(_left_hwnd, hitem)) { if (expand) if (!TreeView_Expand(_left_hwnd, hitem, TVE_EXPAND)) return false; return true; } break; } } return false; }
// Tim item co text = sz tai nut hParent cua TreeView HTREEITEM TV_FindItem(HTREEITEM hParent, TCHAR *sz) { TVITEM kq; TCHAR szText[PATHFILE_MAX_LEN]; HTREEITEM hItem; int k; // Khoi tao cac gia tri cho item kq.mask = TVIF_TEXT; kq.pszText = szText; kq.cchTextMax = PATHFILE_MAX_LEN; // Them thu muc vao ListView if (hItem = TreeView_GetChild(hwndTreeView, hParent)) { do { kq.hItem = hItem; TreeView_GetItem(hwndTreeView, &kq); k = wcscmp(kq.pszText, sz); if (k == 0) // Tim thay return hItem; // else // if (k > 0) // return NULL; } while (hItem = TreeView_GetNextSibling(hwndTreeView, hItem)); } return NULL; }