能力值:
( LV12,RANK:300 )
|
-
-
2 楼
invoke SendMessage,hWndTreeView,TVM_DELETEITEM,0,eax ;删除节点 invoke SendMessage,hWndTreeView,TVM_GETNEXTITEM,\ TVGN_NEXT,@stTvitem.hItem ;获取子节点的下一个同级节点句柄
第一个SendMessage把相应节点删除之后,第二个SendMessage调用时,由于@stTvitem.hItem对应的节点已经被删除,当然就会返回获取失败,这样就直接退出了。
可能的解决办法
1. 把两个SendMessage对调一下,先获取下一个节点句柄保存起来,再删除上一个
2. 每一个子节点被删除后,原来的下一个节点就成为父节点的第一个子节点了,根据这个特点,可以在删除每一个子节点后再调用SendMessage取父节点的第一个子节点,直到父节点的第一个子节点返回0为止。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
_TreeDelItem proc
LOCAL @stTvitem:TV_ITEM
invoke RtlZeroMemory,addr @stTvitem,sizeof @stTvitem
invoke SendMessage,hWndTreeView,TVM_GETNEXTITEM,TVGN_CARET,0 ;获取当前节点句柄
invoke SendMessage,hWndTreeView,TVM_GETNEXTITEM,TVGN_CHILD,eax ;获取当前节点的第一个子节点句柄
.while ( eax !=0 )
push eax
invoke SendMessage,hWndTreeView,TVM_GETNEXTITEM,TVGN_NEXT,eax ;获取子节点的下一个同级节点句柄
mov @stTvitem.hItem,eax ;保存句柄
pop eax
invoke SendMessage,hWndTreeView,TVM_DELETEITEM,0,eax ;删除节点
mov eax,@stTvitem.hItem
.endw
ret
_TreeDelItem endp
问题解决,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
汇编高手,哈哈
|
|
|