关于TreeCtrl SetItemData 释放问题_wanxiaohong1350的专栏-程序员宝宝

技术标签: shell  测试  vc程序设计  delete  

有时候要在每个树节点上,增加一些额外的数据,这时就可以用SetItemData(HTREEITME,DWORD);

使用的方法为:

 Struct SYourStruct

{

     int index ;

     CStirng strName;

}Sapp,*LpApp;//

  你定义的结构体

 LpApp sItemData = new Sapp();

 sItemData->index = 1;

 sItemData->strName = "XXX";

 m_treeCtrl.SetItemData(m_HitemTree,(DWORD)sItemData);

 这时不能用 delete sItemData ,如不信,你可以试试,树节点增加的额外值都乱了

 因为节点中有内存没有释放,我们不能简单的调用DeleteAllItmes(),但是什么时候释放合适呢?

 我曾在CAppDlg的OnClose(),OnDestroy()中访问树的根节点,获得的节点句柄值都是空的

 查了一些资料,节点额外数据内存的释放,我们可以响应TreeCtrl的TVN_DELETEITEM事件

void CAppDlg::OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult)
{
 TVITEM& item = ((LPNMTREEVIEW)pNMHDR)->itemOld;

 // free item data, ignore invalid shell items
 if (item.lParam != 0)
        delete (sItemData )item.lParam;//这里就会把你的内存释放掉
 *pResult = 0;

}

这个删除节点的动作可以用DeleteAllItems()来触发,我们可以用这个来做测试,但是我们不能在CAppDlg析构函数,CAppDlg的OnClose(),OnDestroy()中调用DeleteAllItems(),到这些函数前,其实树应该不存在的,树有N项,当销毁树的时候OnDeleteItem就会执行N次,因此不

需要我们手动调用.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wanxiaohong1350/article/details/7611757

智能推荐

java string转map_Java string类型转换成map代码实例_老K先生的博客-程序员宝宝

Java string类型转换成map代码实例背景:有时候string类型的数据取出来是个很标准的key、value形式,通过Gson的可以直接转成map使用方式:Gson gson = new Gson();Map map = new HashMap();map = gson.fromJson(jsonString, map.getClass());#关键String goodsid=(Stri...

excel_baidu_35975930的博客-程序员宝宝

public void exportExecel(){//判断用户类型BookUserInfo user = getUser();try {if(user!=null && user.isIsadmin()){Pager pager =bookInfoService.getPagerBySql(null, null, page, 99999, sort, order);List bo

LuaTeX-ja与中文排版笔记_张大鹏的专栏-程序员宝宝

\documentclass{article}\usepackage{luatexja-fontspec}\setmainjfont{FandolSong}\begin{document} 测试 在 Lua\TeX{} 中正常地使用中文。获得自动的\textbf{字体选择},标点“压缩”,以及正确的断行处理等特性。\end{document}\documentc

漫谈大数据仓库与挖掘系统(二):层次、维度与主题[email protected]忽悠真人-程序员宝宝

本文其它章节:漫谈大数据仓库与挖掘系统(一):大数据的价值漫谈大数据仓库与挖掘系统(三):ETL的开始——数据的传输和同步在上一章节的末尾,我们谈到,这个系列的文章,最终会以我国公安机关拥有的公民信息、加上民航部门拥有的出行信息、银行拥有的交易信息等数据为例,逐渐讲述如何构建一个大数据的国民信息挖掘系统。不过以上一章节所叙述的基础知识,还不足以让我们进入实例环节。在这一章,

【晨星项目搭建问题】There was an unexpected error (type=Not Found, status=404). /WEB-INF/pages/frontpages/inde_喜欢新技术的彭英峻-程序员宝宝

Idea在启动SpringBoot时访问Jsp页面报错:There was an unexpected error (type=Not Found, status=404). /WEB-INF/page//XX.jsp结果找了一圈终于找到了:如果SpringBoot在子模块,直接main启动子模块会在C:\Users\xxx\AppData\Local\Temp这个目录下,会生成tom...

Android Studio 的 NDK 配置_ayang1986的专栏-程序员宝宝_as ndk 设置

文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI . ndkBuild 配置 ( Android.mk ) VII . 博客相关资源下载 I . 源码编译配置1 . 源码编译配置 :① 配置位置 :Module 级别的 build.gradle 中进行配置 ;...

随便推点

网易云课程:深度学习与PyTorch入门实战_Everyday try to become batter -Kobe Bryant-程序员宝宝_pytorch深度学习实战

网易云课程:深度学习与PyTorch入门实战01 深度学习初见1.1 深度学习框架简介1.2 pytorch功能演示2开发环境安装3回归问题3.1简单的回归问题(梯度下降算法)3.3回归问题实战3.4 分类问题引入3.6手写数字识别体验4Pytorch基础4.1张量数据类型4.2创建Tensor4.3 索引与切片4.4 维度变换5随机梯度下降5.1什么是梯度?5.2 什么是梯度局部极小值鞍点影响搜索过程的其他因素5.3 常见函数的梯度激活函数与loss梯度1激活函数与Loss梯度26.5 感知机的梯度推导-

计算机网络_aaronlanni的博客-程序员宝宝_csdn计算机网络

一、计算机的发展 1、计算机网络的功能 a、连通性:使得上网用户之间可以交换信息 b、共享:共享资源 2、因特网的概述 网络:由若干结点和连接着这些结点的链路组成,网络中的结点可以是计算机、集线器、路由器、交换机等,(互联网是“网络中的网络”,将网络与网络通过路由器连接在一起) 因特网(Internet):世界上最大的网络,网络是将许多计算机连接在一起,而因特网是将许多网络连接在一起 ...

cookie规范(RFC6265)翻译_weixin_30508309的博客-程序员宝宝

来源:https://github.com/renaesop/blog/issues/4RFC 6265 要点翻译1.简介本文档定义了HTTP Cookie以及HTTP头的Set-Cookie字段。通过使用Set-Cookie头,一个HTTP服务器可以传递name/value键值对以及相对应的元数据(所谓的cookies)到user agent。当user agent向服务...

微信小程序使用七牛云对象存储保存图片和文件_美奇软件开发工作室-程序员宝宝_七牛云存储 微信小程序

先给大家看效果图,如下:一、开通七牛云对象存储服务(免费的)官网:https://www.qiniu.com/,实名认证后,创建一个空间,用于保存文件二、获取AccessKey和SecretKey密钥,在“个人中心”→ “密钥管理”中三、thinkphp后端:生成七牛云上传凭证Token1、下载七牛云php依赖库,下载地址:https://github.co...

卡西欧科学计算机使用方法,卡西欧计算器使用说明_袁先康的博客-程序员宝宝

日常办公中计算器是必不可少的一个工具。可是你知道你手中的这个工具的所有功能吗?下面就写一下卡西欧计算器使用说明,下面就以卡西欧DZ-12S为样品进行介绍:1.右上角的可以左右调节的F-4-2-1-0-ADD2叫做小数位选择器:F:显示不做任何取舍数值的浮点小数。(常用设置在这里不必调整)4-2-1-0:就是为CUT-UP-5/4功能指定小数位数。ADD2:自动为全部数值加上小数点后2位,相当于除以...

Pytorch中的卷积、空洞卷积和组卷积_a171232886的博客-程序员宝宝_pytorch中空洞卷积

Pytorch中的卷积、空洞卷积和组卷积标准卷积Conv2d具体操作空洞卷积组卷积参考文献标准卷积Conv2d最基础的卷积。下面图虽然丑了点,但足够说明问题了。注:(1) kernel的值在初始化中是随机生成的,可以每个值之间都不一样。 (2)每个通道只对应一个bias值。具体操作torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=