treeview添加系统图标

猿猿网页设计 2015-01-08 12:30:39
[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,可是不知道该如何修改。
...全文
256 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
猿猿网页设计 2015-01-30
  • 打赏
  • 举报
回复
自己已经解决了
shui_1825948094 2015-01-10
  • 打赏
  • 举报
回复
为TreeView添加图片 private void btn_Get_Click(object sender, EventArgs e) { treeView1.ImageList = imageList1;//绑定ImageList控件 TreeNode tr = new TreeNode("公司职员", 0, 1); tr.Nodes.Add("", "张大力", 0, 1); tr.Nodes.Add("", "王小健", 0, 1); tr.Nodes.Add("", "李明丽", 0, 1); tr.Nodes.Add("", "刘雅洁", 0, 1); tr.Nodes.Add("", "孰小康", 0, 1); tr.Nodes.Add("", "赵名企", 0, 1); tr.Nodes.Add("", "懂佳音", 0, 1); tr.Nodes.Add("", "高小凡", 0, 1); treeView1.Nodes.Add(tr); treeView1.ExpandAll(); }

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧