如何做一个类似资源管理器的东东?100分!

zhangsx 2006-07-17 05:50:59
其他东西都基本解决了,就是文件图标,如何显示各个文件的图标?比如,文本文件就显示通用的文本文件图标,而.exe文件就显示它自己的图标?是不是用EXACTICON?怎么用?请高手告之?100分
...全文
212 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
VirtualDesktop 2006-07-17
  • 打赏
  • 举报
回复
http://www.cndevx.com/Soft/ShowSoft.asp?SoftID=2177
tripman 2006-07-17
  • 打赏
  • 举报
回复
'下面一个例子,在窗体上放一个DriveList、一个DirList、一个FileList、一个TextBox、两个Label,两个PictrueBox

Option Explicit

Private Type TypeIcon
cbSize As Long
picType As PictureTypeConstants
hIcon As Long
End Type

Private Type CLSID
id(16) As Byte
End Type

Private Const MAX_PATH = 260
Private Type SHFILEINFO
hIcon As Long ' out: icon
iIcon As Long ' out: icon index
dwAttributes As Long ' out: SFGAO_ flags
szDisplayName As String * MAX_PATH ' out: display name (or path)
szTypeName As String * 80 ' out: type name
End Type

Private Declare Function OleCreatePictureIndirect Lib "oleaut32.dll" (pDicDesc As TypeIcon, riid As CLSID, ByVal fown As Long, lpUnk As Object) As Long
Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long

Private Const SHGFI_ICON = &H100
Private Const SHGFI_LARGEICON = &H0
Private Const SHGFI_SMALLICON = &H1

' Convert an icon handle into an IPictureDisp.
Private Function IconToPicture(hIcon As Long) As IPictureDisp
Dim cls_id As CLSID
Dim hRes As Long
Dim new_icon As TypeIcon
Dim lpUnk As IUnknown

With new_icon
.cbSize = Len(new_icon)
.picType = vbPicTypeIcon
.hIcon = hIcon
End With
With cls_id
.id(8) = &HC0
.id(15) = &H46
End With
hRes = OleCreatePictureIndirect(new_icon, _
cls_id, 1, lpUnk)
If hRes = 0 Then Set IconToPicture = lpUnk
End Function

Private Function GetIcon(filename As String, icon_size As Long) As IPictureDisp
Dim index As Integer
Dim hIcon As Long
Dim item_num As Long
Dim icon_pic As IPictureDisp
Dim sh_info As SHFILEINFO

SHGetFileInfo filename, 0, sh_info, _
Len(sh_info), SHGFI_ICON + icon_size
hIcon = sh_info.hIcon
Set icon_pic = IconToPicture(hIcon)
Set GetIcon = icon_pic
End Function

Private Sub DirList_Change()
FileList.Path = DirList.Path
End Sub
Private Sub DriveList_Change()
On Error GoTo DriveError
DirList.Path = DriveList.Drive
Exit Sub

DriveError:
DriveList.Drive = DirList.Path
Exit Sub
End Sub

Private Sub FileList_Click()
Dim fname As String

On Error GoTo LoadPictureError

fname = FileList.Path + "\" + FileList.filename
Caption = "ShowIcons [" & fname & "]"

SmallIconPicture.Picture = _
GetIcon(fname, SHGFI_SMALLICON)
SmallIconLabel.Caption = _
Format$(SmallIconPicture.ScaleWidth) & _
"x" & _
Format$(SmallIconPicture.ScaleHeight)

LargeIconPicture.Picture = _
GetIcon(fname, SHGFI_LARGEICON)
LargeIconLabel.Caption = _
Format$(LargeIconPicture.ScaleWidth) & _
"x" & _
Format$(LargeIconPicture.ScaleHeight)

Exit Sub

LoadPictureError:
Beep
Caption = "ShowIcons [Invalid picture]"
Exit Sub
End Sub

Private Sub Form_Resize()
Dim wid As Integer
Dim hgt As Integer

If WindowState = vbMinimized Then Exit Sub

PatternText.Move _
0, ScaleHeight - PatternText.Height

hgt = (PatternText.Top - DriveList.Top - _
DriveList.Height) / 2
If hgt < 10 Then hgt = 10
wid = DriveList.Width
DirList.Move 0, DriveList.Top + _
DriveList.Height, wid, hgt
FileList.Move 0, DirList.Top + _
DirList.Height, wid, hgt
End Sub


Private Sub PatternText_Change()
FileList.Pattern = PatternText.Text
End Sub


tripman 2006-07-17
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B319340
tripman 2006-07-17
  • 打赏
  • 举报
回复
通过SHGetFileInfo函数来获取系统关联图标

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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