如何在VC++下实现高彩色工具条?

eric007 2004-08-11 04:37:26
由于VC限制工具栏上的图标不能超出16色,因此不论是在资源视图直接编辑位图还是用复制粘贴等手段均无法获取超出256色的工具条。
后来看到过一篇解决此类问题的文章,大致内容如下:
由于工具条在显示时有并不直接从Toolbar获取图标而是从图像列表中读取,因此可以通过其他一些图像处理软件做好类似于工具条的bmp图像,并以位图的形式加入到程序资源。在使用时,先将其读取到图像列表,这样图像列表中用于显示到工具条上的图标的颜色就可以是256、24位、甚至32位色的了。 用图像处理软件绘制工具条位图,控制好图像的尺寸,如需要有N个边长为 M的图标,那么需要绘制的位图尺寸为长=N*M;宽=M。
准备工作就绪后,用::LoadImage()函数去加载工具条位图,并通过宏MAKEINTRESOURCE()来指定具体要加载哪一个资源位图:

HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
  MAKEINTRESOURCE(IDB_TOOLBAR), //加载IDB_TOOLBAR
  IMAGE_BITMAP, //按位图格式
  0,0, // cx,cy
  LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );

/*LoadImage返回一个位图句柄HBITMAP,但在MFC下使用CBitmaps会更加方便,可创建一个CBitmap对象并用Attach()成员函数将它与位图句柄联系起来:*/

CBitmap bm;
  bm.Attach(hbm);
m_ilToolBar.Create(32,32,ILC_COLOR8, 4, 4);//ILC_COLOR8标明了创建的图像列表是256色
  m_ilToolBar.Add(&bm,(CBitmap*)NULL);

/*最后一步,也是最关键的一步,必须通过SetImageList()函数指定工具条m_wndToolBar的图标来源不再是原来缺省的图像列表而是含有高彩色位图的图像列表m_ilToolBar:*/

m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);

请问有经验的高手:是通过什么图像处理软件做出类似于工具条的bmp图像?(并能控制好图像的尺寸,如需要有N个边长为 M的图标,那么需要绘制的位图尺寸为长=N*M;宽=M)



...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
eric007 2004-08-12
  • 打赏
  • 举报
回复
一步步制作真彩工具条里说的就是用visual toolbar 软件来做工具条阿,这软件不是免费的!
kvw3000 2004-08-11
  • 打赏
  • 举报
回复
一步步制作真彩工具条

http://www.vckbase.com/document/viewdoc/?id=1069
eric007 2004-08-11
  • 打赏
  • 举报
回复
用potoshop麻烦点了吧,刚搜到一个软件Visual Toolbar ,可是得注册才行,:(
http://act.it.sohu.com/download/show-20407.html

哪位有注册码啊?
思危 2004-08-11
  • 打赏
  • 举报
回复
我用Phtoshop
lixia0san 2004-08-11
  • 打赏
  • 举报
回复
http://www.codeguru.com/Cpp/controls/toolbar/article.php/c2537/
flyelf 2004-08-11
  • 打赏
  • 举报
回复
photoshop
《VC++.NET精彩百例》配套代码

[涉及平台] VC++.NET
[作者] void
[文件大小] 2969KB
[更新日期] 2005-10-30

一、资源说明

第1章 界面编程
实例1 "欢迎"界面
实例2 动态字幕效果
实例3 透明窗体
实例4 静态切分窗口
实例5 滚动视图
实例6 字形窗口
实例7 多边形窗口
实例8 HTML浏览器
实例9 窗口的动画效果
实例10 实现动画图标
实例11 动态切分窗口
实例12 橡皮区矩形
实例13 多个定时器
实例14 椭圆窗体


第2章 图像和多媒体编程

实例 15 BMP文件浏览器
实例 16 图像的镜像处理
实例 17 图像的分割处理
实例 18 使用画笔
实例 19 使用画刷
实例 20 显示空心字
实例 21 显示渐进字体
实例 22 显示艺术字体
实例 23 马赛克效果
实例 24 MiDi播放器
实例 25 CD播放器
实例 26 纹理场景效果
实例 27 Bezier线框曲面
实例 28 输出旋转文本

第3章 对话框与控件编程
实例 29 树形控件
实例 30 列表控件
实例 31 时间控件
实例 32 彩色按钮
实例 33 组合框控件
实例 34 单选按钮和复选框
实例 35 工具栏编程
实例 36 状态栏编程
实例 37 对话框显示图片
实例 38 模式对话框
实例 39 非模式对话框
实例 40 位图按钮
实例 41 对话栏编程

第4章 文件与系统编程
实例 42 鼠标绘图
实例 43 键盘输入
实例 44 获取文件属性
实例 45 访问修改注册表
实例 46 设定计算机名称
实例 47 列举驱动器
实例 48 关闭操作系统
实例 49 查找文件
实例 50 获取磁盘空间
实例 51 读写文件
实例 52 系统进程检测
实例 53 获取系统信息
实例 54 获取文件夹路径
实例 55 设定系统时间

第5章 线程操作与COM组件编程
实例 56 创建线程
实例 57 线程间的通信
实例 58 使用自定义消息
实例 59 线程间的优先级
实例 60 线程间的同步
实例 61 重用C++对象
实例 62 创建永久对象
实例 63 MFC建立COM
实例 64 测试COM组件


第6章 网络和数据库编程
实例 65 聊天室服务器
实例 66 HTTP应用程序
实例 67 FTP应用程序
实例 68 HTTP服务器
实例 69 发送电子邮件
实例 70 接收电子邮件
实例 71 ATL Server Web
实例 72 DOA获取信息
实例 73 DAO数据库编程
实例 74 ADO访问数据库

第7章 OPENGL编程
实例 75 绘制对比矩形
实例 76 绘制直线
实例 77 绘制圆和椭圆
实例 78 绘制三角形
实例 79 缩放变换
实例 80 旋转变换
实例 81 平移变换
实例 82 绘制点
实例 83 OpenGL编程
实例 84 实现简单动画
实例 85 视口投影变换
实例 86 键盘控制图形

第8章 OLE和GDI+编程
实例 87 OLE容器
实例 88 保存OLE信息
实例 89 设置跟踪矩形
实例 90 显示多个OLE项
实例 91 ActiveX服务器
实例 92 插值模式
实例 93 图像区域平铺
实例 94 文字填充
实例 95 图形容器
实例 96 线帽组合
实例 97 半透明线条
实例 98 颜色再变换表
实例 99 旋转和扭曲图像
实例 100 显示垂直文本

二、使用说明
本书所附光盘的内容包含了开发实例的所有程序源码,所有程序源码都是在Visual C++.NET上编译通过的。要运行本光盘上的实例,用户需要先安装Visual C++.NET编译环境,请将光盘上的实例拷贝到本机硬盘上,并去掉其只读属性。程序拷贝到本机硬盘后,经编译即可直接运行。(注意:各文件的文件名请与原书中的名称保持一致)

  关于读者近期反映的《Visual C++.net精彩编程百例》附带源码光盘问题,经核查,我们发现光盘中的确存在着源代码命名与原书不匹配的现象。发生这种现象的原因主要是由于工作人员失误,光盘在刻制过程采用了较旧的8×3文件名格式,导致某些文件/文件夹的名称信息丢失,使读者不能够直接使用。我们已经以最快的速度对此问题进行了初步更正。对于此次发布的新版源代码,您可以根据原书章节直接找到对应的源代码目录,然后根据原书中的文件名,将源代码中相应的文件名予以纠正即可正常使用。

  给读者的阅读使用造成了诸多不便,在此表示深深的歉意!希望能得到您的体谅并一如既往支持我们的工作,谢谢!
第一章 MATLAB6.5 基础 1.1 MATLAB 语言介绍 1.1.1 MATLAB 产品系列与应用 1.1.2 MATLAB6.5 的新特点 1.2 MATLAB 语言基础 1.2.1 认识 MATLAB6.5 环境 1.2.2 MATLAB6.5 变量和表达式 1.2.3 数组的产生 1.2.4 数组的操作 1.2.5 常用的数学函数 1.2.6 数组的运算 1.2.7 数组的扩展 1.2.8 数组的转换 1.2.9 MATLAB 控制语句 1.2.10 其它控制语句 1.2.11 文件操作 1.2.12 M 文件 第二章 MATLAB 图形绘制基础 2.1 二维绘图 2.1.1 基本绘图函数 2.1.2 图形窗口的修饰 2.2 三维绘图 2.2.1 plot3 函数 2.2.2 三维网格图和曲面图 第三章 MATLAB 图形对象 3.1 图形对象 3.1.1 Root 对象 3.1.2 Figure 对象 3.1.3 Uicontrol 对象 3.1.4 Uimenu 对象 3.1.5 Axes 对象 3.1.6 Image 对象 3.1.7 Line 对象 3.1.8 Patch 对象 3.1.9 Rectangle 对象 3.1.10 Surface 对象 3.1.11 Light 对象 3.1.12 Text 对象 第四章 MATLAB 图形对象操作 4.1 图形对象的属性 4.2 图形对象句柄的获取 4.2.1 对象创建时获取 4.2.2 层次关系来获取 4.2.3 当前对象的获取 4.2.4 根据对象属性值的获取 4.3 图形对象句柄的删除与判断 4.3.1 句柄的删除 4.3.2 句柄的判断 4.4 图形对象属性值的获取与设置 4.4.1 图形对象属性值的设置 4.4.2 图形对象属性值的获取 4.4.3 用户缺省值的操作 4.5 图形对象的其它操作 4.5.1 figflag 函数 4.5.2 findfigs 函数 4.5.3 copyobj 函数 4.5.4 capture 函数 4.5.5 refresh 函数 4.5.6 saveas 函数 4.5.7 hgload 函数和 hgsave 函数 4.5.8 newplot 函数 第五章 GUI 设计 5.1 认识 GUI 环境 5.1.1 版面设计工具 5.1.2 属性编辑器 5.1.3 菜单编辑器 5.1.4 调整工具 5.1.5 对象浏览器 5.1.6 TAB 次序编辑器 5.1.7 GUIDE 环境设置 5.2 GUI 设计 5.2.1 GUI 设计原则 5.2.2 GUI 设计步骤 5.3 GUI 实现 5.3.1 组件的布局 5.3.2 属性编辑 5.3.3 回调函数 5.4 GUI 实例 5.4.1 组件布局 5.4.2 属性值的修改 5.4.3 回调函数 5.4.4 调试程序 5.4.5 执行的效果 5.4.6 结束语 第六章 MATLAB 特殊图形的绘制 6.1 区域图 6.2 填充图 6.2.1 二维填充图 6.2.2 三维填充图 6.3 条形图 6.3.1 二维条形图 6.3.1 三维条形图 6.4 直方图 6.4.1 笛卡儿坐标系下的直方图 6.4.2 极坐标系下的直方图 6.5 圆体图 6.5.1 圆柱体的绘制 6.5.2 球体的绘制 6.5.3 椭圆体的绘制 6.6 饼图 6.6.1 二维饼图 6.6.2 三维饼图 6.7 排列图 6.8 离散图形的绘制 6.8.1 二维柄状图 6.8.2 三维柄状图 6.8.3 阶梯图 6.9 散点图 6.9.1 二维散点图 6.9.2 三维散点图 6.9.3 散点图矩阵 6.10 轮廓图 6.10.1 二维轮廓图 6.10.2 三维轮廓图 6.11 向量图 6.11.1 罗盘图 6.11.2 羽状图 6.11.3 箭头图 6.11.4 法线图 第七章 MATLAB 级绘图功能 7.1 彗星图 7.1.1 二维彗星轨迹图 7.1.2 三维彗星轨迹图 7.2 帧动画 7.3 程序动画 7.4 色图变幻 7.5 Voronoi 图和三角剖分 7.6 四面体 7.7 彩带图 7.7.1 彩带图 7.7.2 三维流彩带图 7.8 伪彩图 7.9 切片图 7.9.1 切片图 7.9.2 切片轮廓线图 7.10 网格图和曲面图特效 7.10.1 显示轮廓线 7.10.2 显示围裙 7.10.3 瀑布效果 7.10.4 带光

15,979

社区成员

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

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