一步一步教你实现CTreeCtrl 自绘

本文详细介绍了如何实现CTreeCtrl的自绘,包括两种方法:通过NM_CUSTOMDRAW消息和重写ON_PAINT。文章提供了自绘的必要性、涉及的数据结构和关键函数,并给出了实际的绘制思路和代码示例。
摘要由CSDN通过智能技术生成

一步一步教你实现CTreeCtrl 自绘

  -------BY wojiushi3344   

QQ:513670524  转载请说明出处

 

扫描二维码,添加好友,获取更多的斗地主编程技术

             源代码下载

    最近因工作需求,需要自绘CTreeCtrl。由于原来从来没有自绘过,开始在网上搜索资料,查询(因此本文有些知识可能不全面,或许还有更好的办法来实现,还请大家多多指教。)经过一段时间的编写,终于写好了。在此,感谢网友bunpkin提供的实例参考。

先贴上效果图,如果觉得还不错,那就继续往下看吧。如果觉得不行的,请飘过。

 如何你看见这句话我会很高兴,因为至少我写的东西对你还是有一点点的吸引了。在此谢过!

很好,那现在让我们来说说为什么要自绘CTreeCtrl。我总结了以下2点需要自绘的情况。

1.当系统自带的树形控件已不满足我们的要求时,我们需要自绘。就像上图一样我们需要在后面显示我们额外的图标。

2.当你是一个追求界面美观的人时,我们需要自绘

 我们需要自绘CTreeCtrl控件,我们就必须先了解一下自绘的方法,

CTreeCtrl自绘有2种方法可以实现。

第一种:通过从写NM_CUSTORMDRAW反射消息实现自绘。

第二种 通过重写   ON_PAINT实现自绘。

 二种方法都是通过继承CTreeCtrl类,然后重写虚函数实现。

  下面分别介绍每一种的方法:

 第一种:通过从写NM_CUSTORMDRAW反射消息实现自绘。从这个消息的英文单词我们翻译过来就是自定义绘制。当CTreeCtrl控件需要绘制就会触发这个消息。需要注意的是这个函数被调用的时候只是绘制了当前的某一个节点,意思就是当我们的CTreeCtrl有10个节点需要绘制的时候这个函数就需要调用10次。

这个是函数原型

void CMyTreeCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)

这个函数会给我们传入一个pNMHDR指针,这个指针有我们很关心的数据,如当前的HDC,RECT,和当前的节点信息,但是必须要通过转换。下面是转换语句。

NMTVCUSTOMDRAW *ptvTreeCtrl=(NMTVCUSTOMDRAW *)pNMHDR

 可能有的朋友会问为什么需要类型转换了,这是由于在我们的程序中收到NM_CUSTORMDRAW消息的不止CTreeCtrl一个,其它的控件也能收到,这里我们我为了区分是哪个控件收到的消息所以我们需要对应的类型转换。下面是常见控件的类型转换类型。

Control Structure
List view NMLVCUSTOMDRAW
ToolTips NMTTCUSTOMDRAW
Tree view NMTVCUSTOMDRAW
All ot
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值