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

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

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

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

_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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (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
_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
雪    币: 2568
活跃值: (399)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
汇编高手,哈哈
2010-1-29 14:38
0
游客
登录 | 注册 方可回帖
返回
//