VC 和DEPH还有.net都非常的好调用系统imagelist,而VB却不行,我现在是通过shgetfileinfo来循环获取图标,但是有个非常大的缺陷,当1000个以上的图标的时候,就会取不到或者乱码,而且速度奇慢
 不知道各位有什么好的意见或者想法,请发到.cn  敬请探讨!

解决方案 »

  1.   

    ...调用系统imagelist,而VB却不行.
    什么意思?
      

  2.   

    用API就可以了!Declare Function SHGetFileInfo Lib "shell32" Alias "SHGetFileInfoA" _
                                  (ByVal pszPath As Any, _
                                  ByVal dwFileAttributes As Long, _
                                  psfi As SHFILEINFO, _
                                  ByVal cbFileInfo As Long, _
                                  ByVal uFlags As Long) As Long
    Public Function GetSystemImagelist(uSize As Long) As Long
      Dim sfi As SHFILEINFO
      ' Any valid file system path can be used to retrieve system image list handles.
      GetSystemImagelist = SHGetFileInfo("C:\", 0, sfi, Len(sfi), SHGFI_SYSICONINDEX Or uSize)
    End Function
      

  3.   

    调用时的例子:
      Call ListView_SetImageList(m_hwndLV, GetSystemImagelist(SHGFI_SMALLICON), LVSIL_SMALL)
      Call ListView_SetImageList(m_hwndLV, GetSystemImagelist(SHGFI_LARGEICON), LVSIL_NORMAL)
      

  4.   

    楼上2位,你们这些我都试过,结果是行不通的,VB不能直接得到系统imagelist。
      

  5.   

    zly910 写过一个资源管理器,你可以参考一下这里也有一个(法语的):
    http://www.vbfrance.com/codes/EXPLORATEUR-WINDOWS_7433.aspx
      

  6.   

    VC 和DEPH还有.net都非常的好调用系统imagelist,而VB却不行,我现在是通过shgetfileinfo来循环获取图标,但是有个非常大的缺陷,当1000个以上的图标的时候,就会取不到或者乱码,而且速度奇慢
    不知道各位有什么好的意见或者想法,请发到.cn 敬请探讨!---答:对于Exe文件或没有共同的图标,你必须一个一个读,一个一个添加到Imagelist;但对于那些具有共同的图标的文件,例如jpg文件,你就不必,因为大家都Share同一个图标,添加一次就可以了,大家都指向同一Index.
      

  7.   

    答:对于Exe文件或没有共同的图标的文件,你必须一个一个读,一个一个添加到Imagelist;但对于那些具有共同的图标的文件,例如jpg文件,你就不必,因为大家都Share同一个图标,添加一次就可以了,大家都指向同一Index.