取得根据文件类型取得图标

1.添加imagelist,picturebox ,listview控件
2.声明API方法
Private Declare Function ImageList_Draw Lib "comctl32.dll" (ByVal himl&, ByVal i&, ByVal hDCDest&, ByVal x&, ByVal y&, ByVal flags&) As Long
Public Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String,ByVal dwFileAttributes As Long,psfi As SHFILEINFO,ByVal cbSizeFileInfo As Long,ByVal uFlags As Long) As Long
Public Type SHFILEINFO
   hIcon As Long
   iIcon As Long
   dwAttributes As Long
   szDisplayName As String * MAX_PATH
   szTypeName As String * 80
End Type
Public Const SHGFI_EXETYPE = &H2000
Public Const SHGFI_LARGEICON = &H0
Public Const SHGFI_SHELLICONSIZE = &H4
Public Const SHGFI_SMALLICON = &H1
Public Const SHGFI_SYSICONINDEX = &H4000
Public Const SHGFI_TYPENAME = &H400

Public Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME Or SHGFI_SHELLICONSIZE Or SHGFI_SYSICONINDEX Or SHGFI_DISPLAYNAME Or SHGFI_EXETYPE

Public Const MAX_PATH = 260
Public Const ILD_TRANSPARENT = &H1
3.取得图标的方法
(1)通过文件的扩展名取得图标
Public Function GetFileIcon(fileName As String, index As Long) As Long
    Dim hLIcon As Long, hSIcon As Long
    Dim imgObj As ListImage
    Dim r As Long
    Dim ext As String
    Dim icon_n As Long
    ext = GetFileExtension(fileName)
    hSIcon = SHGetFileInfo("." & ext, 0&, SHinfo, Len(SHinfo), BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON Or &H10)

    'hLIcon = SHGetFileInfo("." & ext, 0&, SHinfo, Len(SHinfo), BASIC_SHGFI_FLAGS Or SHGFI_LARGEICON Or &H10)
    If hSIcon <> 0 Then
      With pic16
        Set .Picture = LoadPicture("")
        .AutoRedraw = True
        r = ImageList_Draw(hSIcon, SHinfo.iIcon, pic16.hDC, 0, 0, ILD_TRANSPARENT)
        .Refresh
      End With
      Set imgObj = iml16.ListImages.Add(index, , pic16.Image)
     
    End If
End Function
(2)通过文件的路径取得图标
Public Function GetFileIcon(fileName As String, index As Long) As Long
    Dim hLIcon As Long, hSIcon As Long
    Dim imgObj As ListImage
    Dim r As Long
    Dim ext As String
    Dim icon_n As Long
   
    hSIcon = SHGetFileInfo(fileName, 0&, SHinfo, Len(SHinfo), BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)'Small icon
    hLIcon = SHGetFileInfo(fileName, 0&, SHinfo, Len(SHinfo), BASIC_SHGFI_FLAGS Or SHGFI_LARGEICON )'Big icon
    If hSIcon <> 0 Then
      With pic16
        Set .Picture = LoadPicture("")
        .AutoRedraw = True
        r = ImageList_Draw(hSIcon, SHinfo.iIcon, pic16.hDC, 0, 0, ILD_TRANSPARENT)
        .Refresh
      End With
      Set imgObj = iml16.ListImages.Add(index, , pic16.Image)
    End If
End Function
4.显示图标
Private Sub ShowIcons()
    On Error Resume Next
    Dim Item As ListItem
    With lvFiles‘ListView 控件
      .SmallIcons = iml16   'Small
      For Each Item In .ListItems
        Item.Icon = Item.index
        Item.SmallIcon = Item.index
      Next
    End With
End Sub
通过以上方法即可实现取得文件的相应的图标。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值