15,977
社区成员
发帖
与我相关
我的任务
分享
//
BOOL InitTreeView(HWND hwndTreeView)
{
// set tree style
LONG NewStyle=GetWindowLong(hwndTreeView,GWL_STYLE);
NewStyle=NewStyle|TVS_HASBUTTONS|TVS_HASLINES|TVS_INFOTIP|
TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_EDITLABELS;
SetWindowLong(hwndTreeView,GWL_STYLE,NewStyle);
//
HIMAGELIST hImageList;
SHFILEINFO sfi;
hImageList = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\",0,&sfi,sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
if (hImageList)
{// Attach ImageList to TreeView
TreeView_SetImageList(hwndTreeView,hImageList,TVSIL_NORMAL);
}
// draw tree "My Computer"
TV_INSERTSTRUCT TreeCtrlItem;
TreeCtrlItem.hParent = TVI_ROOT;
TreeCtrlItem.hInsertAfter = TVI_LAST;// don't use TVI_SORT;
TreeCtrlItem.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_CHILDREN;//|TVIF_STATE;
TreeCtrlItem.item.pszText= m_MyComputer;//
TreeCtrlItem.item.cchTextMax = MAX_PATH;
TreeCtrlItem.item.cChildren=1;// has child show "+"
//
HRESULT hr;
LPMALLOC lpMalloc;
hr=::SHGetMalloc(&lpMalloc);
if (FAILED(hr)) return TRUE;
// get pidl of "My Computer"
LPITEMIDLIST lpidl=NULL; // pidl of "My Computer"
hr=SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES,&lpidl);
if (FAILED(hr)) return TRUE;
// icons and "My Computer"
SHGetFileInfo((LPCSTR)lpidl,0,&sfi,sizeof(SHFILEINFO), SHGFI_PIDL |
SHGFI_DISPLAYNAME | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
TreeCtrlItem.item.iImage = sfi.iIcon;
strcpy(m_MyComputer,sfi.szDisplayName);
//
SHGetFileInfo((LPCSTR)lpidl,0,&sfi,sizeof(SHFILEINFO),SHGFI_PIDL |
SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON);
TreeCtrlItem.item.iSelectedImage = sfi.iIcon;
// insert root
HTREEITEM hTreeItem1 = TreeView_InsertItem(hwndTreeView,&TreeCtrlItem);
TreeCtrlItem.hParent = hTreeItem1;
// Free
lpMalloc->Free(lpidl);
lpMalloc->Release();
// under "My Computer"
char buf[MAX_PATH];
char *pDrv=buf;
char drive[40];
if(GetLogicalDriveStrings(260,buf))
{// try all drive
while(*pDrv)
{
strcpy(drive,pDrv);
pDrv+=strlen(drive)+1;
// no A:
if(stricmp(drive,"A:\\")==0) continue;
SHGetFileInfo(drive,FILE_ATTRIBUTE_DIRECTORY,&sfi,sizeof(sfi),
SHGFI_DISPLAYNAME | SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
TreeCtrlItem.hParent = hTreeItem1;
TreeCtrlItem.item.pszText = sfi.szDisplayName;
TreeCtrlItem.item.iImage=sfi.iIcon;
TreeCtrlItem.item.iSelectedImage = sfi.iIcon;
TreeCtrlItem.item.cChildren=1;// child show "+"
// add in
HTREEITEM hTreeItem2 = TreeView_InsertItem(hwndTreeView,&TreeCtrlItem);
// TreeCtrlItem.hParent = hTreeItem2;
}
}
// expand "My Computer"
// TreeView_SelectItem(hwndTreeView,hTreeItem1);//m_Tree.SelectItem();// root
TreeView_Expand(hwndTreeView,hTreeItem1,TVE_EXPAND);// root
return TRUE;
}