首页
社区
课程
招聘
[已解决]汇编中如何删除TreeView的一个节点下的所有子节点
发表于: 2010-1-28 17:03 4849

[已解决]汇编中如何删除TreeView的一个节点下的所有子节点

2010-1-28 17:03
4849
+小学
.....+理科
.....+物理
...........+第一章

如图,想实现当点击‘小学’的时候,删除下面的所有子节点。
我的代码如下,但是只是删除第一个子节点循环的就退出了,大家帮我修改一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
_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 )
            mov @stTvitem.hItem,eax                     ;保存句柄
            invoke  SendMessage,hWndTreeView,TVM_DELETEITEM,0,eax           ;删除节点
            invoke  SendMessage,hWndTreeView,TVM_GETNEXTITEM,TVGN_NEXT,@stTvitem.hItem  ;获取子节点的下一个同级节点句柄
        .endw
    ret
 
_TreeDelItem endp

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费
支持
分享
最新回复 (3)
雪    币: 722
活跃值: (123)
能力值: ( 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为止。
2010-1-28 17:12
0
雪    币: 145
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
_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


问题解决,谢谢
2010-1-28 17:52
0
雪    币: 2567
活跃值: (420)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
汇编高手,哈哈
2010-1-29 14:38
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册