/****************************************************************************** FUNCTION: ShowDeskImages()** PURPOSE: Show the icon and the title of the desk.*****************************************************************************/HTREEITEM CShellTree::ShowDeskImages(){ ITEMIDLIST *pidlDeskTop; SHFILEINFO fi={0}; HIMAGELIST hImageList; if(S_OK!=SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidlDeskTop)) { return FALSE; } hImageList=(HIMAGELIST)SHGetFileInfo(( LPCTSTR)pidlDeskTop,0U,&fi, sizeof(SHFILEINFO), SHGFI_DISPLAYNAME | SHGFI_PIDL |SHGFI_SYSICONINDEX|SHGFI_SMALLICON ); IMalloc* pMalloc; if(SUCCEEDED(SHGetMalloc(&pMalloc))) { pMalloc->Free(pidlDeskTop); pMalloc->Release(); } if (hImageList) ::SendMessage(m_hWnd, TVM_SETIMAGELIST, (WPARAM) TVSIL_NORMAL, (LPARAM)hImageList); return InsertItem(fi.szDisplayName,fi.iIcon,fi.iIcon,NULL);}该函数用Shell API在树中显示出桌面和相应图标。 CTreeCtrl::InsertItem这里的参数解释如下:第一个为显示树结点的名称,第二个为显示结点开始的图标在CImagelist中的索引号,第三个为在结点选择后显示的图标在CImagelist中的索引号。第四个参数为NULL,表明在根结点显示。如不在根结点显示,则填写父结点的标识符。

评论