void HierarchyTreeWidget::GetChildItems(const QTreeWidgetItem* parent, TREEITEMS &items) { for(int i = 0; i < parent->childCount(); i++) { QTreeWidgetItem* item = parent->child(i); QVariant data = item->data(ITEM_ID); items[data.toInt()] = item; if (item->childCount()) GetChildItems(item, items); } }
HierarchyTreeWidget::TREEITEMS HierarchyTreeWidget::GetAllItems() { TREEITEMS items; for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++) { QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i); if (!item) continue; QVariant data = item->data(ITEM_ID); items[data.toInt()] = item; if (item->childCount()) GetChildItems(item, items); } return items; }
LRESULT CMyTreeView::OnNotifyReflect(WPARAM, LPARAM lParam) { LPNMHDR lpnmh = (LPNMHDR) lParam; switch (lpnmh->code) { case NM_RCLICK: { CPoint ptScreen; ::GetCursorPos(&ptScreen); DoContextMenu(ptScreen); } break; case TVN_GETDISPINFO: { LPNMTVDISPINFO lpdi = (LPNMTVDISPINFO)lParam; TreeItemData* pItem = (TreeItemData*)lpdi->item.lParam; //do we need to supply the text? if (lpdi->item.mask & TVIF_TEXT) { SHFILEINFO sfi = {0}; //get the display name of the item if (pItem->GetFullCpidl().SHGetFileInfo(0, sfi, SHGFI_PIDL | SHGFI_DISPLAYNAME)) ::lstrcpyn(lpdi->item.pszText, sfi.szDisplayName, lpdi->item.cchTextMax - 1); } //do we need to supply the unselected image? if (lpdi->item.mask & TVIF_IMAGE) { SHFILEINFO sfi = {0}; //get the unselected image for this item if (pItem->GetFullCpidl().SHGetFileInfo(0, sfi, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_LINKOVERLAY)) lpdi->item.iImage = sfi.iIcon; } //do we need to supply the selected image? if (lpdi->item.mask & TVIF_SELECTEDIMAGE) { SHFILEINFO sfi = {0}; //get the selected image for this item if (pItem->GetFullCpidl().SHGetFileInfo(0, sfi, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON)) lpdi->item.iSelectedImage = sfi.iIcon; } } break; case TVN_ITEMEXPANDING: { LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; switch (pnmtv->action) { case TVE_EXPAND: { UINT ExpandedOnce = pnmtv->itemNew.state & TVIS_EXPANDEDONCE; if (!ExpandedOnce) GetChildItems(pnmtv->itemNew.hItem); } break; } } break; case TVN_SELCHANGED: { LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; TreeItemData* pItem = (TreeItemData*)pnmtv->itemNew.lParam; CMyListView* LeftView = GetExplorerApp().GetMainFrame().GetListView(); LeftView->DisplayFolder(pItem->GetParentFolder(), pItem->GetFullCpidl(), pItem->GetRelCpidl()); } break; } // switch(lpnmh->code) return 0; }