三态树制作

VCHelp之乐天蛋黄派 2011-09-04 03:11:03
因项目需要,做了个三态树。期间在网上查了不少资料,发现需要这方面技术的人还不少,因此在这里分享一下经验。

我是按以下步骤做的:

1,继承 TreeCtrl 创建一个类
2,处理 NM_CUSTOMDRAW 消息
3,响应用户的各种操作

重点在处理 NM_CUSTOMDRAW 消息的处理上,消息怎么用请查 MSDN, 我在这里主要说思路。

在处理 NM_CUSTOMDRAW 时,先取得 Item 的 Rect. 之后绘制 “展开按钮”, 然后计算偏移量,再绘制“复选框”,之后再计算偏移量,绘制“图标”,之后再计算偏移量,绘制文本。

展开按钮,就是方框中有个+号或-号的那个,只是两个BITMAP交替使用。
关于复选框,实际上并没有复选框,复选框只是一个BITMAP,复选框的三种状态对应三个BITMAP。

处理这个消息的关键是,跟踪用户的操作,并记录 TreeCtrl 中每个 Item 的信息,然后根据这些信息绘图。

以下是效果。

我正在做这方面的研究,如果哪位有更好的思路,欢迎探讨。

...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuse_kalrey 的回复:]

远没有如此复杂,直接为CTreeCtrl SetImageList 指定TVSIL_STATE, 位图为CheckBox的3态样式
然后处理OnLButtonDown消息,做HitTest,然后的FLAG信息来提取是否点中了State位图,然后利用SetItemState来设置状态位图的状态值,就OK了
同时,记得处理ON_NOTIFY_REFLECT(NM_CLICK, YourFunct……
[/Quote]

哦,受教了,有时间就试试。
wuse_kalrey 2011-10-13
  • 打赏
  • 举报
回复
远没有如此复杂,直接为CTreeCtrl SetImageList 指定TVSIL_STATE, 位图为CheckBox的3态样式
然后处理OnLButtonDown消息,做HitTest,然后的FLAG信息来提取是否点中了State位图,然后利用SetItemState来设置状态位图的状态值,就OK了
同时,记得处理ON_NOTIFY_REFLECT(NM_CLICK, YourFunction)
YourFunction中测试是否点中了State位图,点钟则将*pResult参数设置为1就OK了,这样TreeCtrl就不会自动更改state位图的状态了

我说的以上方法能良好运行
Eleven 2011-09-04
  • 打赏
  • 举报
回复
路过看看~
ggt87125 2011-09-04
  • 打赏
  • 举报
回复
谢谢分享 能共享下代码吗 ?
quwei197874 2011-09-04
  • 打赏
  • 举报
回复
谢谢分享
gold_water 2011-09-04
  • 打赏
  • 举报
回复
加油!!!
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 quwei197874 的回复:]
谢谢分享 能共享下代码吗 ?
[/Quote]

对不起,商业项目,代码不能分享。
第2章 控件应用 75 2.1 按钮控件典型实例 76 实例049 AVI动画按钮 76 实例050 GIF动画按钮 78 实例051 图文按钮 80 实例052 不规则按钮 82 实例053 热点按钮 84 2.2 编辑框控件典型实例 86 实例054 为编辑框设置新的系统菜单 87 实例055 为编辑框控件添加列表选择框 88 实例056 多彩边框的编辑框 90 实例057 改变编辑框文本颜色 91 实例058 不同文本颜色的编辑框 92 实例059 位图背景编辑框 93 2.3 静态文本控件典型实例 94 实例060 电子计时器 94 实例061 使用静态文本控件设计群组框 96 实例062 制作超链接控件 97 2.4 列表框控件典型实例 99 实例063 利用列表框控件实现标签式数据选择 99 实例064 具有水平滚动条的列表框控件 100 实例065 列表项的提示条 101 实例066 位图背景列表框控件 104 2.5 组合框控件典型实例 105 实例067 将数据表中的字段添加到组合框控件 106 实例068 带查询功能的组合框控件 107 实例069 自动调整组合框的宽度 108 实例070 颜色组合框 109 实例071 多列显示的组合框 111 实例072 带图标的组合框 113 实例073 显示系统盘符组合框 114 2.6 列表视图控件典型实例 115 实例074 Windows资源管理器 115 实例075 利用列表视图控件浏览数据 118 实例076 利用列表视图控件制作导航界面 120 实例077 在列表视图中拖动视图项 121 实例078 具有排序功能的列表视图控件 123 实例079 具有文本录入功能的列表视图控件 126 实例080 使用列表视图设计登录界面 128 2.7 视图控件典型实例 129 实例081 多级数据库状结构数据显示 129 实例082 节点拖动功能的控件 131 实例083 带复选功能的状结构 134 实例084 三态效果控件 135 实例085 修改控件节点连线颜色 137 实例086 位图背景控件 138 实例087 显示磁盘目录 140 实例088 型提示框 141 2.8 RichEdit控件典型实例 143 实例089 利用RichEdit显示Word文档 143 实例090 利用RichEdit控件实现文字定位与标识 144 实例091 利用RichEdit控件显示图文数据 146 实例092 在RichEdit中显示不同字体和颜色的文本 148 实例093 在RichEdit中显示GIF动画 149 2.9 滚动条控件典型实例 157 实例094 自定义滚动条控件 157 2.10 进度条控件典型实例 162 实例095 进度条百分比显示 162 实例096 渐变颜色的进度条 164 2.11 工具提示控件典型实例 165 实例097 应用工具提示控件 165 2.12 滑块控件典型实例 167 实例098 使用滑块控件设置颜色值 167 实例099 绘制滑块控件 168 2.13 标签控件典型实例 170 实例100 应用标签控件 170 实例101 自定义标签控件 172 2.14 控件数组典型实例 175 实例102 向窗体中动态添加控件 175 实例103 公交线路模拟 177
第1章 窗体与界面设计   1.1 菜单应用实例    实例001 在系统菜单中添加菜单项    实例002 带图标的程序菜单    实例003 根据表中数据动态生成菜单    实例004 浮动的菜单   1.2 弹出菜单应用实例    实例005 在控件上单击右键弹出菜单    实例006 个性化的弹出菜单    实例007 任务栏托盘弹出菜单   1.3 工具栏应用实例    实例008 带背景的工具栏    实例009 带图标的工具栏    实例010 带下拉菜单的工具栏    实例011 可调整按钮位置的工具栏    实例012 XP风格工具栏    实例013 动态设置是否显示工具栏按钮文本    实例014 具有提示功能的工具栏   1.4 状态栏应用实例    实例015 带进度条的状态栏    实例016 动画效果的状态栏    实例017 滚动字幕的状态栏   1.5 导航界面应用实例    实例018 Outlook导航界面    实例019 状导航界面    实例020 按钮导航界面    实例021 图片导航界面   1.6 界面窗体应用实例    实例022 使用位图设计畸形界面    实例023 椭圆形的程序界面    实例024 自绘窗体界面    实例025 以时钟显示界面    实例026 窗体融合技术    实例027 限制对话框最大时的窗口大小    实例028 分割视图窗口    实例029 对话框全屏显示   1.7 多媒体宣传光盘应用实例    实例030 多媒体宣传光盘主界面    实例031 自动运行的多媒体宣传光盘   1.8 多媒体触摸屏程序应用实例    实例032 采购中心多媒体触摸屏程序    实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例    实例034 不可移动的窗体    实例035 始终在最上面的窗体    实例036 以动画形式显示窗体    实例037 磁性窗体   1.10 窗体标题栏应用实例    实例038 闪烁的窗体标题栏    实例039 拖动没有标题栏的窗体    实例040 禁用标题栏上的最大化、最小化或关闭按钮   1.11 窗体形状及应用    实例041 半透明窗体    实例042 创建字型窗体    实例043 设计桌面精灵   1.12 通用对话框的应用    实例044 打开位图预览对话框    实例045 打开Windows新型对话框    实例046 同时选择多个文件    实例047 文本替换对话框    实例048 字体选择对话框  第2章 控件应用   2.1 按钮控件典型实例    实例049 AVI动画按钮    实例050 GIF动画按钮    实例051 图文按钮    实例052 不规则按钮    实例053 热点按钮   2.2 编辑框控件典型实例    实例054 为编辑框设置新的系统菜单    实例055 为编辑框控件添加列表选择框    实例056 多彩边框的编辑框    实例057 改变编辑框文本颜色    实例058 不同文本颜色的编辑框    实例059 位图背景编辑框   2.3 静态文本控件典型实例    实例060 电子计时器    实例061 使用静态文本控件设计群组框    实例062 制作超链接控件   2.4 列表框控件典型实例    实例063 利用列表框控件实现标签式数据选择    实例064 具有水平滚动条的列表框控件    实例065 列表项的提示条    实例066 位图背景列表框控件   2.5 组合框控件典型实例    实例067 将数据表中的字段添加到组合框控件    实例068 带查询功能的组合框控件    实例069 自动调整组合框的宽度    实例070 颜色组合框    实例071 多列显示的组合框    实例072 带图标的组合框    实例073 显示系统盘符组合框   2.6 列表视图控件典型实例    实例074 Windows资源管理器    实例075 利用列表视图控件浏览数据    实例076 利用列表视图控件制作导航界面    实例077 在列表视图中拖动视图项    实例078 具有排序功能的列表视图控件    实例079 具有文本录入功能的列表视图控件    实例080 使用列表视图设计登录界面   2.7 视图控件典型实例    实例081 多级数据库状结构数据显示    实例082 节点拖动功能的控件    实例083 带复选功能的状结构    实例084 三态效果控件    实例085 修改控件节点连线颜色    实例086 位图背景控件    实例087 显示磁盘目录    实例088 型提示
第1章 窗体与界面设计   1.1 菜单应用实例    实例001 在系统菜单中添加菜单项    实例002 带图标的程序菜单    实例003 根据表中数据动态生成菜单    实例004 浮动的菜单   1.2 弹出菜单应用实例    实例005 在控件上单击右键弹出菜单    实例006 个性化的弹出菜单    实例007 任务栏托盘弹出菜单   1.3 工具栏应用实例    实例008 带背景的工具栏    实例009 带图标的工具栏    实例010 带下拉菜单的工具栏    实例011 可调整按钮位置的工具栏    实例012 XP风格工具栏    实例013 动态设置是否显示工具栏按钮文本    实例014 具有提示功能的工具栏   1.4 状态栏应用实例    实例015 带进度条的状态栏    实例016 动画效果的状态栏    实例017 滚动字幕的状态栏   1.5 导航界面应用实例    实例018 Outlook导航界面    实例019 状导航界面    实例020 按钮导航界面    实例021 图片导航界面   1.6 界面窗体应用实例    实例022 使用位图设计畸形界面    实例023 椭圆形的程序界面    实例024 自绘窗体界面    实例025 以时钟显示界面    实例026 窗体融合技术    实例027 限制对话框最大时的窗口大小    实例028 分割视图窗口    实例029 对话框全屏显示   1.7 多媒体宣传光盘应用实例    实例030 多媒体宣传光盘主界面    实例031 自动运行的多媒体宣传光盘   1.8 多媒体触摸屏程序应用实例    实例032 采购中心多媒体触摸屏程序    实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例    实例034 不可移动的窗体    实例035 始终在最上面的窗体    实例036 以动画形式显示窗体    实例037 磁性窗体   1.10 窗体标题栏应用实例    实例038 闪烁的窗体标题栏    实例039 拖动没有标题栏的窗体    实例040 禁用标题栏上的最大化、最小化或关闭按钮   1.11 窗体形状及应用    实例041 半透明窗体    实例042 创建字型窗体    实例043 设计桌面精灵   1.12 通用对话框的应用    实例044 打开位图预览对话框    实例045 打开Windows新型对话框    实例046 同时选择多个文件    实例047 文本替换对话框    实例048 字体选择对话框  第2章 控件应用   2.1 按钮控件典型实例    实例049 AVI动画按钮    实例050 GIF动画按钮    实例051 图文按钮    实例052 不规则按钮    实例053 热点按钮   2.2 编辑框控件典型实例    实例054 为编辑框设置新的系统菜单    实例055 为编辑框控件添加列表选择框    实例056 多彩边框的编辑框    实例057 改变编辑框文本颜色    实例058 不同文本颜色的编辑框    实例059 位图背景编辑框   2.3 静态文本控件典型实例    实例060 电子计时器    实例061 使用静态文本控件设计群组框    实例062 制作超链接控件   2.4 列表框控件典型实例    实例063 利用列表框控件实现标签式数据选择    实例064 具有水平滚动条的列表框控件    实例065 列表项的提示条    实例066 位图背景列表框控件   2.5 组合框控件典型实例    实例067 将数据表中的字段添加到组合框控件    实例068 带查询功能的组合框控件    实例069 自动调整组合框的宽度    实例070 颜色组合框    实例071 多列显示的组合框    实例072 带图标的组合框    实例073 显示系统盘符组合框   2.6 列表视图控件典型实例    实例074 Windows资源管理器    实例075 利用列表视图控件浏览数据    实例076 利用列表视图控件制作导航界面    实例077 在列表视图中拖动视图项    实例078 具有排序功能的列表视图控件    实例079 具有文本录入功能的列表视图控件    实例080 使用列表视图设计登录界面   2.7 视图控件典型实例    实例081 多级数据库状结构数据显示    实例082 节点拖动功能的控件    实例083 带复选功能的状结构    实例084 三态效果控件    实例085 修改控件节点连线颜色    实例086 位图背景控件    实例087 显示磁盘目录    实例088 型提示
第1章 窗体与界面设计   1.1 菜单应用实例    实例001 在系统菜单中添加菜单项    实例002 带图标的程序菜单    实例003 根据表中数据动态生成菜单    实例004 浮动的菜单   1.2 弹出菜单应用实例    实例005 在控件上单击右键弹出菜单    实例006 个性化的弹出菜单    实例007 任务栏托盘弹出菜单   1.3 工具栏应用实例    实例008 带背景的工具栏    实例009 带图标的工具栏    实例010 带下拉菜单的工具栏    实例011 可调整按钮位置的工具栏    实例012 XP风格工具栏    实例013 动态设置是否显示工具栏按钮文本    实例014 具有提示功能的工具栏   1.4 状态栏应用实例    实例015 带进度条的状态栏    实例016 动画效果的状态栏    实例017 滚动字幕的状态栏   1.5 导航界面应用实例    实例018 Outlook导航界面    实例019 状导航界面    实例020 按钮导航界面    实例021 图片导航界面   1.6 界面窗体应用实例    实例022 使用位图设计畸形界面    实例023 椭圆形的程序界面    实例024 自绘窗体界面    实例025 以时钟显示界面    实例026 窗体融合技术    实例027 限制对话框最大时的窗口大小    实例028 分割视图窗口    实例029 对话框全屏显示   1.7 多媒体宣传光盘应用实例    实例030 多媒体宣传光盘主界面    实例031 自动运行的多媒体宣传光盘   1.8 多媒体触摸屏程序应用实例    实例032 采购中心多媒体触摸屏程序    实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例    实例034 不可移动的窗体    实例035 始终在最上面的窗体    实例036 以动画形式显示窗体    实例037 磁性窗体   1.10 窗体标题栏应用实例    实例038 闪烁的窗体标题栏    实例039 拖动没有标题栏的窗体    实例040 禁用标题栏上的最大化、最小化或关闭按钮   1.11 窗体形状及应用    实例041 半透明窗体    实例042 创建字型窗体    实例043 设计桌面精灵   1.12 通用对话框的应用    实例044 打开位图预览对话框    实例045 打开Windows新型对话框    实例046 同时选择多个文件    实例047 文本替换对话框    实例048 字体选择对话框  第2章 控件应用   2.1 按钮控件典型实例    实例049 AVI动画按钮    实例050 GIF动画按钮    实例051 图文按钮    实例052 不规则按钮    实例053 热点按钮   2.2 编辑框控件典型实例    实例054 为编辑框设置新的系统菜单    实例055 为编辑框控件添加列表选择框    实例056 多彩边框的编辑框    实例057 改变编辑框文本颜色    实例058 不同文本颜色的编辑框    实例059 位图背景编辑框   2.3 静态文本控件典型实例    实例060 电子计时器    实例061 使用静态文本控件设计群组框    实例062 制作超链接控件   2.4 列表框控件典型实例    实例063 利用列表框控件实现标签式数据选择    实例064 具有水平滚动条的列表框控件    实例065 列表项的提示条    实例066 位图背景列表框控件   2.5 组合框控件典型实例    实例067 将数据表中的字段添加到组合框控件    实例068 带查询功能的组合框控件    实例069 自动调整组合框的宽度    实例070 颜色组合框    实例071 多列显示的组合框    实例072 带图标的组合框    实例073 显示系统盘符组合框   2.6 列表视图控件典型实例    实例074 Windows资源管理器    实例075 利用列表视图控件浏览数据    实例076 利用列表视图控件制作导航界面    实例077 在列表视图中拖动视图项    实例078 具有排序功能的列表视图控件    实例079 具有文本录入功能的列表视图控件    实例080 使用列表视图设计登录界面   2.7 视图控件典型实例    实例081 多级数据库状结构数据显示    实例082 节点拖动功能的控件    实例083 带复选功能的状结构    实例084 三态效果控件    实例085 修改控件节点连线颜色    实例086 位图背景控件    实例087 显示磁盘目录    实例088 型提示框   2.8 RichEdit控件典型实例    实例089 利用RichEdit显示Word文档    实例090 利用RichEdit控件实现文字定位与标识    实例091 利用RichEdit控件显示图文数据    实例092 在RichEdit中显示不同字体和颜色的文本    实例093 在RichEdit中显示GIF动画   2.9 滚动条控件典型实例    实例094 自定义滚动条控件   2.10 进度条控件典型实例    实例095 进度条百分比显示    实例096 渐变颜色的进度条   2.11 工具提示控件典型实例    实例097 应用工具提示控件   2.12 滑块控件典型实例    实例098 使用滑块控件设置颜色值    实例099 绘制滑块控件   2.13 标签控件典型实例    实例100 应用标签控件    实例101 自定义标签控件   2.14 控件数组典型实例    实例102 向窗体中动态添加控件    实例103 公交线路模拟  第3章 图形技术  第4章 多媒体技术  第5章 文件系统  第6章 操作系统与Windows相关程序  第7章 注册表  第8章 数据库技术  第9章 SQL查询相关技术  第10章 打印与报表技术  第11章 硬件相关开发技术  第12章 网络开发技术  第13章 Web编程  第14章 加密、安全与软件注册  第15章 实用工具  附录 技术要点对应实例位置

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧