【发布时间】:2015-07-18 13:42:03
【问题描述】:
使用 Borland C++ Builder 2009 我可以在 TListView 对象中显示覆盖图标,使用我自己的 TImageList。
不过,我还需要它来处理 Windows 图标。显示这些图标不是问题,但我无法让 Overlay 图标正常工作。
这就是我所做的(不完整并且代码从一个更大的项目中提取出来,但它应该正确地说明问题):
在初始化期间:
SHFILEINFO info ;
SmallSystemIconsList->Handle = SHGetFileInfo( L"",
0,
&info,
sizeof(info),
SHGFI_ICON |
SHGFI_SMALLICON |
SHGFI_SYSICONINDEX |
SHGFI_OVERLAYINDEX
) ;
DestroyIcon(info.hIcon) ;`
每当我想知道一个图标的索引时:
SHFILEINFO info ;
SHGetFileInfo( MyFileName.c_str(),
FILE_ATTRIBUTE_NORMAL,
&info,
sizeof(SHFILEINFO) ,
SHGFI_ICON |
SHGFI_USEFILEATTRIBUTES |
SHGFI_OVERLAYINDEX
) ;
DestroyIcon(info.hIcon) ;
// TListItem *ListItem
ListItem->ImageIndex = (info.iIcon & 0x00FFFFFF) ;
ListItem->OverlayIndex = (info.iIcon >> 24) - 1;
我注意到在测试期间传递了正确的值。例如,当文件名是“something.lnk”时,ListItem->OverlayIndex 被赋值为 2。
但是没有显示覆盖图标。我确定我错过了一些东西。为了让覆盖图标与我自己的TImageList 对象一起使用,我必须调用ImageList->Overlay()。我想知道是否需要对 Windows 列表执行相同的操作,但我不确定要使用哪些值。
【问题讨论】:
标签: c++ winapi c++builder