我想使用C ++将Icon添加到treeview节点。我想从系统中获取图标,我试过了
我试过了,
PMString ucPath("C:\\path\\to\\file.extension");
SHFILEINFO info;
::SHGetFileInfo(ucPath.GrabTString(), FILE_ATTRIBUTE_NORMAL, &info, sizeof(info),
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON);
iconView->SetRsrcID((RsrcID) info.hIcon);
::DestroyIcon(info.hIcon);
其中,SetResrcID,PMString是InDesing API,iconView是树的controlView,我不知道出了什么问题,如果有人有想法请建议。
谢谢, Praveen Mamdge
答案 0 :(得分:2)
以下是我在应用程序中使用的代码,您应该将图标更改为位图。
PMString ucPath("C:\\path\\to\\file.extension");
SHFILEINFO info;
::SHGetFileInfo(ucPath.GrabTString(), FILE_ATTRIBUTE_NORMAL, &info, sizeof(info),
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON);
ICONINFO stIconInfo;
GetIconInfo(s_sfi.hIcon, &stIconInfo);
HBITMAP hBmp = stIconInfo.hbmColor;
DestroyIcon(s_sfi.hIcon) ;
最好的方法是使用带有SHGFI_SYSICONINDEX的系统图标索引。
答案 1 :(得分:2)
有点像这样, 首先从文件中提取图标。
SHFILEINFO stFileInfo;
SHGetFileInfo( file,
FILE_ATTRIBUTE_NORMAL,
&stFileInfo,
sizeof( stFileInfo ),
SHGFI_ICON | SHGFI_LARGEICON );
然后添加到imagelist并使用索引设置图标。
m_nIndex = m_ilLargeIcons.Add( stFileInfo.hIcon );
答案 2 :(得分:0)
这是您的代码段,逐行观察:
PMString ucPath(“C:\ path \ to \ file.extension”); SHFILEINFO信息;
:: SHGetFileInfo(ucPath.GrabTString(),FILE_ATTRIBUTE_NORMAL,& info,sizeof(info), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON);iconView-> SetRsrcID((RsrcID)info.hIcon);
:: DestroyIcon(info.hIcon);
在这一行:iconView->SetRsrcID((RsrcID) info.hIcon);
之后,你调用了:: DestroyIcon来销毁你存储的那个图标。