注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 微软开发专栏 > VC.NET 内容正文:VC++实现显示透明的256色以上的图标

VC++实现显示透明的256色以上的图标

发布时间:2006-08-17 20:46:34 来源:天极开发 网友评论 0 条
  相关图形处理技巧:

  ·
灰度图像与彩色图像的相互转换
  ·位图显示透明效果
  ·对话框添加透明位图
  ·
实现透明滑动控件
 
  源代码下载

  在学习Visual C++编程的过程中,有很多朋友可能会问Visual C++中如何保证256色以上的图标加载后不失真。虽然有介绍如何实现256色以上的工具栏的文章,但是方法中大都采用加载一幅256色以上的工具栏位图的方法。这样的方法存在一个麻烦就是用什么简便好用的制图工具来做这样的位图呢?相信读者朋友都希望能有更直接的方法来使用256色以上的图标,并且能够以透明的效果不失真地将图标显示出来。本实例介绍了实现上述目标的方法,实现了在工具条上显示透明的256色位图,程序编译运行后的界面效果如图一所示:


图一、透明显示256色的图标

  一、实现方法

  一般情况下,我们如果碰到需要在程序中使用图标的问题,首先要想到要用图像列表CimlageList类,该类是相同尺寸的图像或图标的集合,每个图像或图标用以"0"为基准的索引号来表征,因此它能有效地管理大量图标或位图。CimageList类常与列表控件ClistCtrl、树控件CtreeCtrl或标签控件CtabCtrl一起使用,在本实例中,该类与CtoobBarCtrl类一起使用。

  CimageList类的成员函数Create()初始化图像列表并且将它附加到一个CimageList对象上,该函数原型为:

BOOL Create(int cx,int cy,BOOL bMask,int nInitial,int nGrow);

  函数中前两个参数cx、cy指定了图标/图像的宽度和高度,即:图标/图像的尺寸定义。 第三个参数bMask为掩模标志,它指定何如显示图标/图像。如果该值等于ILC_ COLOR8说明以256色的调色板来显示图标/图像。而等于值"TRUE"则指明了以透明方式来显示图标/图像。那么如果两者进行"按位或"运算后的意义就变为:以透明方式来显示256色图标。 函数中的第四和第五个参数则分别表示为:初始图标个数和新增图标时对象自动申请内存空间的步长。如果在大批量操作图标,并且需要不断的增删图标时,设置第五个参数可以改变程序的性能,如果第五个参数设置的比较适中则可以避免程序反复的申请和释放内存空间。

  创建过CImageList类后,还需要将各个图标装载到该类的对象中去,具体实现过程可以先用Windows的API函数LoadImage()装载图标资源,然后用CImageList类的Add(HICON hIcon)函数加将装载后的图表添加到CImageList类对象中去。其中LoadImage()的函数原型如下:

HANDLE LoadImage(
 HINSTANCE hinst, // handle of the instance containing the image
 LPCTSTR lpszName, // name or identifier of image
 UINT uType, // type of image
 int cxDesired, // desired width
 int cyDesired, // desired height
 UINT fuLoad // load flags
);

  上述函数用来装载图标、图像或光标资源,如果调用成功,函数返回装载的资源的句柄,否则返回"NULL"。其中参数hinst为包含图标/图像资源的应用程序句柄;lpszName为资源的名字,该资源名字的获取可以使用MAKEINTRESOURCE()函数将资源ID转换得到;参数uType说明当前资源的类型,是图标、图像还是光标;cxDesired和cyDesired为希望的目标尺寸;最后一个参数是装载标志,在处理图标资源时,一般情况下设置为"0"。

  最后,需要调用CToolBarCtrl类的CImageList* SetImageList( CImageList* pImageList )函数将图标列表对象与工具条对象关联起来,从而在工具条上显示出装载的图标。

  二、编程步骤

  1、 启动Visual C++6.0,建立一个单文档工程(多文档也可)的应用程序,命名为"TB";

  2、 在程序的主框架CMainFrame类的头中定义一个CImageList对象,代码如下:CImageList m_ilTB;

  3、 在应用程序中添加256色的彩色图标,具体方法是启动程序中图标资源编辑器,点击资源编辑器上的"New Device Image"按钮,在弹出的对话框中选择"自定义"就可以了,实例程序中采用的图标大小为32*32,颜色为256色;

  4、 添加代码,编译运行程序;

相关文章
    无相关信息
【评论】【收藏本文】【打印】【关闭】
上一篇文章:VC中对鼠标的确定及简单控制
下一篇文章:Visual C#命名空间详解
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
用VC获取其它程序的命令行参数
用VC获取其它程序的命令行参数
用Visual C++设计QQ群管理工具
用Visual C++设计QQ群管理工具
推荐阅讯
  • 基于Visual C++6.0的声音文件操作
  • VC++编程实现广告窗口自动关闭
  • Visual C++ 2005中的突破性变化
  • Visual C# 诠释常用排序算法
  • VC++设计基于ODBC的数据库管理系统
  • VC中用简易方法实现淡入淡出的启动画面
  • 用Visual C++设计QQ群管理工具
  • Visual C#2005快速入门之基础语法
  • VC++中利用/GS开关防止缓冲区溢出
  • Visual C#中用WMI控制远程计算机
阅读排行
  • 1.VC++编程实现广告窗口自动关闭
  • 2.深入浅出VC++串口编程之基于控件
  • 3.解读VC++编程中的文件操作API和CFile类
  • 4.利用Visual C#实现ICMP网络协议
  • 5.深入浅出VC++串口编程之第三方类
  • 6.掀起你的盖头来——谈VC++对象模型
  • 7.Visual C#中用WMI控制远程计算机
  • 8.深入浅出VC++串口编程之基于Win32 API
  • 9.Visual C++2005中开发自定义绘图控件
  • 10.深入浅出VC++串口编程之基本概念
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载