首页  编辑  

ListView添加系统文件图标

Tags: /C#/界面处理/ListView_TreeView/   Date Created:

using System . Runtime . InteropServices;

public static uint SHGFI_ICON = 0x100 ;                      

public static uint SHGFI_DISPLAYNAME = 0x200 ;              

public static uint SHGFI_TYPENAME = 0x400 ;                  

public static uint SHGFI_ATTRIBUTES = 0x800 ;                

public static uint SHGFI_ICONLOCATION = 0x1000 ;            

public static uint SHGFI_EXETYPE = 0x2000 ;                  

public static uint SHGFI_SYSICONINDEX = 0x4000 ;            

public static uint SHGFI_LINKOVERLAY = 0x8000 ;              

public static uint SHGFI_SELECTED = 0x10000 ;                

public static uint SHGFI_LARGEICON = 0x0 ;                  

public static uint SHGFI_SMALLICON = 0x1 ;                  

public static uint SHGFI_OPENICON = 0x2 ;                    

public static uint SHGFI_SHELLICONSIZE = 0x4 ;              

public static uint SHGFI_PIDL = 0x8 ;                        

public static uint SHGFI_USEFILEATTRIBUTES = 0x10 ;          

public static uint FILE_ATTRIBUTE_NORMAL = 0x80 ;

public static uint LVM_FIRST = 0x1000 ;

public static uint LVM_SETIMAGELIST = LVM_FIRST + 3 ;

public static uint LVSIL_NORMAL = 0 ;

public static uint LVSIL_SMALL = 1 ;

[ DllImport ( "Shell32.dll" )]

public static extern IntPtr SHGetFileInfo( string pszPath,

    uint dwFileAttributes, ref SHFILEINFO psfi,

    int cbfileInfo, uint uFlags);

public struct SHFILEINFO

{

    public IntPtr hIcon;

    public int iIcon;

    public int dwAttributes;

    public string szDisplayName;

    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,

        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 FileIconIndex( string AFileName)

{

    SHFILEINFO vFileInfo = new SHFILEINFO ();

   SHGetFileInfo(AFileName, 0 , ref vFileInfo,

        Marshal . SizeOf(vFileInfo), SHGFI_SYSICONINDEX);

    return vFileInfo . iIcon;

}

private void button1_Click( object sender , EventArgs e)

{

   ListViewSysImages(listView1);

   listView1 . Items . Add( "temp.txt" , FileIconIndex( @"c:\temp\temp.txt" ));

}