treeview添加系统图标
[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(string pszPath,
uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags);
public struct SHFILEINFO
{
public SHFILEINFO(bool b)
{
hIcon = IntPtr.Zero; iIcon = 0; dwAttributes = 0; szDisplayName = ""; szTypeName = "";
}
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
//public char szDisplayName;
//public char szTypeName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
}
[DllImport("User32.DLL")]
public static extern int SendMessage(IntPtr hWnd,
uint Msg, IntPtr wParam, IntPtr lParam);
public void ListViewSysImages(ListView AListView)
{
SHFILEINFO vFileInfo = new SHFILEINFO();
//IntPtr vImageList = SHGetFileInfo("", 0, ref vFileInfo,
// (uint)Marshal.SizeOf(vFileInfo), (uint)(GetFileInfoFlags.SHGFI_SHELLICONSIZE |
// GetFileInfoFlags.SHGFI_SYSICONINDEX | GetFileInfoFlags.SHGFI_LARGEICON));
//FileAttributeFlags.
IntPtr vImageList = SHGetFileInfo("", 0, ref vFileInfo,
Marshal.SizeOf(vFileInfo), SHGFI_SHELLICONSIZE |
SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
SendMessage(AListView.Handle, LVM_SETIMAGELIST, (IntPtr)LVSIL_NORMAL,
vImageList);
vImageList = SHGetFileInfo("", 0, ref vFileInfo,
Marshal.SizeOf(vFileInfo), SHGFI_SHELLICONSIZE |
SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
SendMessage(AListView.Handle, LVM_SETIMAGELIST, (IntPtr)LVSIL_SMALL,
vImageList);
}
//得到文件或文件夹的图标
public int GetFileImageIcon(string strPath)
{
bool isLargeIcon = false;
uint iconSize;
SHFILEINFO shellFileInfo = new SHFILEINFO();
//SHGFI_ICON|SHGFI_SMALLICON
if (isLargeIcon == true)
{
iconSize = 16640;
}
else
{
iconSize = 257;
}
int iTotal = (int)SHGetFileInfo(strPath, 0, ref shellFileInfo, 100, iconSize);
return shellFileInfo.iIcon;
}
在为listview绑定图标时先调用ListViewSysImages()方法,让后 items.ImageIndex = GetFileImageIcon(文件路径);
那么如何为treeview绑定呢???node.ImageIndex (文件路径),没有显示图标。现在搞不懂ListViewSysImages()方法。请大神们帮忙解决????
如果将获得的图标添加到自定义的ImageList类中,让treeview的ImageList与自定义的绑定,获得到的图标不完全。所以不想用此方法。
网上查阅说treeview可以绑定系统的ImageList,所以我感觉ListViewSysImages()方法应该是绑定系统的ImageList,可是不知道该如何修改。