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
通过以上方法即可实现取得文件的相应的图标。
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
通过以上方法即可实现取得文件的相应的图标。