vc++中的treeview显示系统图标(相当于资源管理器的左边部分)

要在treeview中显示系统图标:

建立系统图标列表:

m_ilDrives为CImageList类型,为成员函数

HIMAGELIST hImgList = NULL;   //list of icon
SHFILEINFO shFinfo;
hImgList = (HIMAGELIST)SHGetFileInfo(_T("c://"), 0, &shFinfo, sizeof(shFinfo), SHGFI_DISPLAYNAME|SHGFI_ATTRIBUTES|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME|SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
if (GetTreeCtrl().GetImageList(TVSIL_NORMAL))
{
   m_ilDrives.Detach();
}
if (hImgList == NULL)
{
   AfxMessageBox(_T("..."));
}
if ( !m_ilDrives.Attach( hImgList ) )
{
   AfxMessageBox(_T("..."));
}
GetTreeCtrl().SetImageList(&m_ilDrives, TVSIL_NORMAL);

先前SetImageList的第二个参数用的是TVSIL_SMALL,结果图标总是显示不出来,额,果然基础知识都没多少直接就开始做项目是有点勉强啊。。。

要显示图标时:

SHFILEINFO shFinfo;
int iIcon = 0;

SHGetFileInfo(pszDrive, 0, &shFinfo, sizeof(shFinfo), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
iIcon = shFinfo.iIcon;

其中:pszDrive是要显示文件的路径名,要是文件夹的话,要记得加"//"

然后在插入树节点的时候使用:

hItem = GetTreeCtrl().InsertItem(pszDrive, iIcon, iIcon);

如果是选中前后显示的图标不一样,比如文件夹的开和关:

    int iIcon, iIconSel;

     SHGetFileInfo(strTemp, 0, &shFinfo, sizeof(shFinfo), SHGFI_ICON|SHGFI_SMALLICON);
     iIcon = shFinfo.iIcon;

     SHGetFileInfo(strTemp, 0, &shFinfo, sizeof(shFinfo), SHGFI_ICON|SHGFI_SMALLICON|SHGFI_OPENICON);
     iIconSel = shFinfo.iIcon;

     hNewItem = GetTreeCtrl().InsertItem((LPCTSTR) &fd.cFileName, iIcon, iIconSel, hItem);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值