ImageList 是否有其它控件可以替换?
因为包含在 MSCOMCTL.OCX 这个控件里。这个控件达1MB多。所以想尽量不用。

解决方案 »

  1.   

    vbAccelerator Image List Control and Class v1.4
       
      Use COMCTL32.DLL directly to create an ImageList and take full control of icons at all colour depths and sizes.
     http://www.vbaccelerator.com/codelib/comctl/imglist.htm
      

  2.   

    参考:
    http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=68113&lngWId=1
    也是从vbAccelerator改过来的。
      

  3.   

    那要看你使用ImageList来干什么了
    微软的系统默认都自带了一个Comctl32.dll动态连接库,而你所说的ocx就是根据这个库来编写的
    换句话说,你完全可以使用comctl32.dll里面的API来动态创建ImageList
    下面给你说一下它的函数,我会尽量说明用途:
    Private Declare Function ImageList_Create Lib "COMCTL32" (ByVal MinCx As Long, ByVal MinCy As Long, ByVal flags As Long, ByVal cInitial As Long, ByVal cGrow As Long) As Long
    //顾名思义,就是创建一个ImageList
    //返回值:ImageList的句柄
    //参数MinCx,MinCy:指定图标的最小尺寸
    //参数flags:如果没什么特别需要的话,请使用ILC_COLORDDB(=&HFE)和ILC_MASK(=&H1)
    //参数cInitial:该图象列表中总共有多少图象(系统会根据图象数量、最小尺寸来分配内存空间。不过我一般都设置为0,天知道有多少图标要添加进去,我自己都不知道)
    //参数cGrow:每次增加图片或图标的数量(这个我一般也是设置为0或者1)Private Declare Function ImageList_Destroy Lib "comctl32.dll" (ByVal himl As Long) As Long
    //顾名思义,就是销毁一个ImageList
    //参数himl:ImageList_Create函数返回的值Private Declare Function ImageList_AddMasked Lib "comctl32.dll" (ByVal himl As Long, ByVal hbmImage As Long, ByVal crMask As Long) As Long
    //这个是增加一个带有透明色彩的位图(注,一定要位图。它不能处理JPG或者GIF)
    //参数himl:就是你用ImageList_Create创建后返回的值
    //参数hbmImage:你使用LoadImage或者其他读位图信息的函数所返回的值
    //参数crMask:透明颜色(请使用RGB(xxx, xxx, xxx)或者直接给予一个Long值)Private Declare Function ImageList_AddIcon Lib "COMCTL32" (ByVal himl As Long, ByVal hIcon As Long) As Long
    //这个是增加一个图标
    //参数himl:同上
    //参数hIcon:这个是你使用LoadIcon或其他读图标句柄的函数所返回的值Private Declare Function ImageList_GetImageCount Lib "comctl32.dll" (ByVal himl As Long) As Long
    //这个是检测图象列表中包含有几个图象的函数
    //返回值:有多少个图象就返回多少
    //参数himl:同上Private Declare Function ImageList_Remove Lib "comctl32.dll" (ByVal himl As Long, ByVal i As Long) As Long
    //这个是把图象列表中第i个图象删除的函数
    //参数himl:同上
    //参数i:图象序号,从0开始计算
    一般最常用的就是上面这几个了,还有其他一些高级点的我不常用,一时记不起来函数原形是什么,所以不能写出来给你
    创建、插入图象后,跟着就是把它“绑定”到其他需要用到图象列表的控件上了
    需要用ImageList的控件一般有ListView、TreeView、ToolBar、StatusBar…………
    反正这些控件都是你所说的那个ocx里面的部件其实这些部件都是可以直接用API创建的,我做的程序都是直接调用API来创建他们的,所以我从来没使用过那个OCX(由于它不是系统自带,我刚装完机器后没有这个文件,所以我只好逼着使用API来编写它的控件)绑定ListView:
    小图标:SendMessage ListView句柄(hWnd), LVM_SETIMAGELIST, LVSIL_SMALL, ByVal 图象列表句柄(ImageList_Create返回值)
    一般图标(32*32):SendMessage 同上, 同上, LVSIL_NORMAL, 同上绑定ToolBar(这个我没试过大小图标之分,你有空自己试试):
    SendMessage ToolBar句柄(hWnd), TBM_SETIMAGELIST, 0, 同上
    好累啊,不写了,你可以自己搜索一下关键词。至于LVM_***或者其他常量,你可以查VB自带的API阅览器或者上网查