本帖最后由 user3000 于 2012-6-11 07:17 编辑
回复 1# 131738
$Limiter = 5 ;Bei 5 leeren icons, abbruch!
搜了下, 大约是5个空图标即结束循环的意思吧.
循环体里, 他是以 0 作为判断条件, 但是 _GUIImageList_AddIcon() 函数失败时返回 -1, 而第一次成功时是返回 0 !
略微修改了代码, 我用 shell32.dll 作了测试,成功添加238个图标,之后全失败,连续返回 -1. 与该文件里的图标总数相符.
测试用的完整代码如下:#include <GuiListView.au3>
#include <GuiImageList.au3>
GUICreate('Test', 580, 280)
$ListView1 = GUICtrlCreateListView("", 5, 5, 570, 270)
_GUICtrlListView_SetView($ListView1, 1)
$PicID = 0 ; 图标索引, shell32.dll 以 0 为起始
$Limiter = 5 ;Bei 5 leeren icons, abbruch!
$iconcounter = 0 ; 图标计数
$imagefile = @SystemDir & "\shell32.dll"
; 以下 3 句应该是初始化 ListView 控件吧?
_GUIImageList_AddIcon($ListView1, $imagefile, 0, True) ; 添加图标到图像列表
$FotoshImageList = _GUIImageList_Create()
_GUICtrlListView_SetImageList($ListView1, $FotoshImageList, 0) ; 分配图像列表到列表视图控件
;_GUICtrlListView_AddItem($ListView1, "0", 0) ; 添加项目到列表的末尾
; 从 0 循环到 一千万(差一个)
For $iCntRow = 0 To 9999999
$res = _GUIImageList_AddIcon($FotoshImageList, $imagefile, $PicID, True) ; 添加大图标到图像列表,返回图像的索引
ConsoleWrite($PicID & @TAB & $res & @CR)
; 退出 For 循环的条件:
If $res = -1 Then
$Limiter = $Limiter - 1
If $Limiter < 1 Then ExitLoop ; 退出循环
Else; 返回图像的索引不等于 0
_GUICtrlListView_SetImageList($ListView1, $FotoshImageList, 0) ; 分配图像列表到(列表视图)控件
_GUICtrlListView_AddItem($ListView1, $PicID, $PicID)
$iconcounter = $iconcounter + 1 ; 图标计数+1
;GUICtrlSetData($statusbar, "发现图标:" & "(" & $iconcounter & ")...")
EndIf
$PicID = $PicID + 1 ; 图标索引+1
Next
ConsoleWrite('totle: ' & $iconcounter & @CR)
GUISetState(@SW_SHOW)
While GUIGetMsg() + 3
WEnd
补充: 其实我也看不懂原来的代码!
循环体里, 用原来的 If Not $res = -1 Then 语句则只'提取'出一个图标 (0 基那个)! |