树的自绘类很多,很方法都是在onpaint()函数中完成自绘。我也看了不少例子,可是与我想要的实现方法思路不同。我都不知道自己为什么非想 在 NM_CUSTOMDRAW 这个消息中完成自绘, 可能是一开始受msdn的影响,msdn上把像这类控件(ListCtrl,Tree等等)的自绘分成几个步骤。我觉得条理清楚而且又符合一般的逻辑,所以。。。好了,不废话了,下面介绍我今天要写的树类。下面我讲讲这个类的实现过程:
首先讲讲这个类具有的功能吧。能够设置背景色,设置节点连线颜色,设置节点颜色和图表(当然你还可以根据自己需要设置节点特征,比如字体),设置节点开关按钮,大概就这么多了;
我们现在从CTreeCtl派生自己的类,然后增加一些成员变量,其中最重要的是CMap <void*, void*, ItemDrawData, ItemDrawData&> m_mapItemDrawData; 其中ItemDrawData 装载了每个节点自绘信息:
struct ItemDrawData {
COLORREF color;
HICON hIcon; //每个节点都可以设置图标
};
由于上船空间限制, 我就上传类的源码。使用此类,只要把.h和.cpp文件包括到你工程中,然后把头文件Include就可以了。下面是运行图: 这是在ppc上运行的情况,在vc 6中应该也能用。
/Files/kuronca/CColorTree.rar