用SHGetFileInfo函数,详细代码一会儿给你。

解决方案 »

  1.   

    SHGetFileInfo函数的例子代码:Option Explicit
    Const SHGFI_ICON = &H100
    Const SHGFI_DISPLAYNAME = &H200
    Const SHGFI_TYPENAME = &H400
    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 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 Sub Form_Paint()
        'KPD-Team 1999
        'URL: http://www.allapi.net/
        'E-Mail: [email protected]
        Dim FI As SHFILEINFO
        'Get file info
        SHGetFileInfo "c:\autoexec.bat", 0, FI, Len(FI), SHGFI_DISPLAYNAME Or SHGFI_TYPENAME Or SHGFI_ICON
        Me.Cls
        Me.Print "Filename: Autoexec.bat"
        Me.Print "Typename: " + StripTerminator(FI.szTypeName)
        Me.Print "Displayname: " + StripTerminator(FI.szDisplayName)
        Me.Print "hIcon: "; FI.hIcon
        Me.Print "iIcon: "; FI.iIcon
    End Sub
    'This fucntion is used to strip al the unnecessary chr$(0)'s
    Function StripTerminator(sInput As String) As String
        Dim ZeroPos As Integer
        'Search the position of the first chr$(0)
        ZeroPos = InStr(1, sInput, vbNullChar)
        If ZeroPos > 0 Then
            StripTerminator = Left$(sInput, ZeroPos - 1)
        Else
            StripTerminator = sInput
        End If
    End Function
      

  2.   

    我测试过上面这段代码了,确实可以得到图标的ID号,但是我怎么才能把这个DLL中的图标跟TREEVIEW连接起来呢,一般来说treeview好象只接受imagelist中的图标吧?那么,把dll中的图标动态装入imagelist的语句应该怎么写?或者其他方式?
      

  3.   

    // 取得系统图标列表(以下操作在程序中只能做一次)
    CImageList gSysImageList; SHFILEINFO shFinfo;
    HIMAGELIST hImgList = (HIMAGELIST)SHGetFileInfo( "C:\\", 0, &shFinfo,
                 sizeof( shFinfo ), SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
    gSysImageList.Attach(hImgList);// 使用
    // 设置ListView的图标列表为系统图标列表gSysImageList
    m_listCtrl->SetImageList(&gSysImageList, LVSIL_SMALL);// 取得文件strFileName的系统图标序号
    SHGetFileInfo( strFileName, 0, &shFinfo, sizeof( shFinfo ),
    SHGFI_ICON | SHGFI_SMALLICON | SHGFI_TYPENAME );
    // 设置ListView中的图标
    nIndex = m_listCtrl->InsertItem(m_listCtrl->GetItemCount(), 
             strFileName, shFinfo.iIcon);
    // 结束使用
    gSysImageList.Detach();