因项目需要,做了个三态树。期间在网上查了不少资料,发现需要这方面技术的人还不少,因此在这里分享一下经验。
我是按以下步骤做的:
1,继承 TreeCtrl 创建一个类
2,处理 NM_CUSTOMDRAW 消息
3,响应用户的各种操作
重点在处理 NM_CUSTOMDRAW 消息的处理上,消息怎么用请查 MSDN, 我在这里主要说思路。
在处理 NM_CUSTOMDRAW 时,先取得 Item 的 Rect. 之后绘制 “展开按钮”, 然后计算偏移量,再绘制“复选框”,之后再计算偏移量,绘制“图标”,之后再计算偏移量,绘制文本。
展开按钮,就是方框中有个+号或-号的那个,只是两个BITMAP交替使用。
关于复选框,实际上并没有复选框,复选框只是一个BITMAP,复选框的三种状态对应三个BITMAP。
处理这个消息的关键是,跟踪用户的操作,并记录 TreeCtrl 中每个 Item 的信息,然后根据这些信息绘图。
以下是效果。
我正在做这方面的研究,如果哪位有更好的思路,欢迎探讨。