CTreeCtrl设置TVS_CHECKBOXES造成gdi泄漏

44 篇文章 0 订阅
7 篇文章 0 订阅

关键字:CTreeCtrl,CTreeView,TVS_CHECKBOXES,gdi,leak,泄漏,TVSIL_STAT

现象:单文档左侧是一个CDialogBar,里面有一个树控件,在int CFramePrint::OnCreate(LPCREATESTRUCT lpCreateStruct)有下面语句

	if (!m_dlgFormBar.Create(this,IDD_DIALOGBAR,CBRS_LEFT | CBRS_NOALIGN ,IDD_DIALOGBAR))
	{
		TRACE0("Failed to create dialogbar\n");
		return -1;
	}
	else
	{
		CWnd * pwnd=m_dlgFormBar.GetDlgItem(IDC_TREE1);
		if(pwnd)
			pwnd->ModifyStyle(0,TVS_CHECKBOXES);
	}

无论使用任务管理器的gdi列还是网上的gdi泄漏检查工具,上面的ModifyStyle(0,TVS_CHECKBOXES);每次打开树控件然后关闭(CFramePrint继承于CFrameWnd且可以new),均会造成4个gdi对象泄漏(2DC+2Bitmap),可能复选框是2个图片,微软又没释放吧。。。

没办法,想到自绘树控件,不过碰到了TVSIL_STATE这个关键字,问题顺势就解决了,也没自绘

解决:

void CFormTreeBar::OnDestroy()
{
	CTreeCtrl* pTree =(CTreeCtrl*)GetDlgItem(IDC_TREE1);
	// If a treeview control is created with TVS_CHECKBOXES, the application has to
	// delete the image list which was implicitly created by the control.
	CImageList *piml = pTree->GetImageList(TVSIL_STATE);
	if (piml)
		piml->DeleteImageList();

	CDialogBar::OnDestroy();
}
检测工具:http://download.csdn.net/detail/dragoo1/4987501

参考:

http://bbs.csdn.net/topics/300221484
http://bbs.csdn.net/topics/390071062
http://bbs.csdn.net/topics/390071063

http://bbs.csdn.net/topics/60456009

http://www.codeproject.com/Messages/2125662/GDI-Leak-in-CTreeCtrl-with-TVS_CHECKBOXES-property.aspx

http://bbs.csdn.net/topics/340164927

http://blog.csdn.net/vvviippp/article/details/7046458

http://support.microsoft.com/kb/224181/zh-cn

http://www.oschina.net/code/explore/eMule-0.50a/srchybrid/DirectoryTreeCtrl.cpp

http://wenku.baidu.com/view/95f236c72cc58bd63186bd98.html

http://st251256589.blog.163.com/blog/static/16487644920116610418905/

http://download.pudn.com/downloads/sourcecode/windows/control/treeview/507363TreeWithCheckBoxes_demo.zip

http://www.codeproject.com/script/articles/download.aspx?file=/KB/tree/VividTree/VividTree_demo.zip&rp=http://www.codeproject.com/Articles/11722/VividTree-A-Colorful-and-Picturesque-Owner-Drawn-C


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值