WindowsShell编程第九章.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WindowsShell编程第九章.doc

Windows Shell 编程 第九章 第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标。无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去有点像一个软件协会而不象普通的设备驱动体系结构的缩写),图标在人们的心目中仍然是亲切的。你必须承认,微软总是从它的图形族群中获得最大的利益。 要了解使用图标表述菜单命令背后的的简单(或不简单)概念,你需要的不是绘制激情也不是艺术欣赏,而是应该清楚,仅使用32X32像素和16种颜色的图块做这样的表述是一个伟大的成绩。对于微软的图标,最值得欣赏的是即使在最低分辨率(16X16像素)下,它们也是清晰的和容易理解的。 随着Windows95的发布,图标巩固了它在Windows中已有的地位。种类也增加了—此时的图标有16X16甚至48X48的分辨率,而且系统也支持更多的颜色。在很多商业产品中使用256色图标是很普通的。 与图标相关的另一个主题是任务条。这并不是说任务条仅和图标有关。而是因为从程序按钮,快速启动工具条到托盘区域,它都非常好地使用了图标。 从编程人员的观点看,最好的消息是微软引进了SHGetFileInfo()函数,它的行为我们已经在第四章中彻底地讨论过了。无论它的名字怎样,这个函数对图标操作而言是最好的。此外随着活动桌面和后来的Windows98的引入,系统给出了一个与任务条一同工作的招牌接口。任务条窗口的结构(以及桌面本身的结构)有了相当的改变。如此,在这一章中我们打算: 对操作图标的函数提供一个总的说明 示范说明怎样从模块中抽取图标 首先给出一种方法在托盘区域放置图标,而后是管理托盘区域图标 检测新任务条的布局 解释关于任务条的没有说明资料的COM接口 在这一章中我们还写了一个浏览包含在任何可执行文件中图标的函数,以及一段自动重启Shell的代码,更重要的是这段代码能够感觉到什么时候Shell重启动了。后一点直接关系到shell32.dll管理托盘图标代码的一个可能的Bug。 ? 关于图标应该知道的 图标可以用于标识任何Shell命名空间中出现的对象;它与Bitmap的主要差别是使用位屏蔽方式显示。在与像素层组合时,这个屏蔽使图标相对于下面的背景有透明的感觉。图标可以是单个资源或一组相关的图象,它们在不同分辨率和颜色深度上重复同一个主题。 在整个Windows Shell范围内,图标都是由一个称之为IExtractIcon的COM接口管理,这在第五章中已经遇到了。IExtractIcon是由封装命名空间扩展的代码实现的,对于文件型文件夹,是在shell32.dll中的代码。然而,你可以通过Shell扩展模块提供你自己的IExtractIcon,这样你就可以客户化Shell图标,在15章中我们将展示应该怎样做。 Windows提供了一个标准图标集,应用可以加载和使用它们而无须卸载。这些图标都由带有IDI_前缀的符号标识,它们定义在winuser.h中—典型的例子是IDI_ICONQUESTION 和 IDI_ICONSTOP,在使用MessageBox()时,可以交叉使用它们。 在建立和加载图标时,要分配一个唯一的Handle,其类型是HICON。很多Win32函数操作图标时都要求一个这种类型的Handle。你必须释放所有在你的程序模块中显式建立和抽取的图标,但是对于系统图标,象上面提到的那些图标则不应该这样,因为它们属于系统,只有在可以释放的时候才释放。 ? 建立图标 建立图标有许多种方法。你可以使用图像编辑器建立.ico文件,或使用资源编辑器在.res文件中把图标与应用的其他资源一起编译。编程建立图标也是可能的,此时,可以使用的函数是: CreateIcon() CreateIconFromResource() CreateIconIndirect() 然而,在程序代码中建立图标的最好方法是使用通用控件:图像列表。 ? 编程建立和修改图标 在第5章中我们举例说明过怎样使用图像列表控件编程修改已存在的图标。我们还特别说明了怎样动态地组合两个图标。这个例子产生了一个手握文件夹的图标,这个图标是系统用于说明给定文件夹是一个共享文件夹的。 建立一个图标太容易了,所要做的就是把一个图标或图像放入一个图像列表控件中,然后通过ImageList_GetIcon()读出来即可。例如,如果有一个HBITMAP,则,下面的代码把它转换成图标: HICON HBitmapToHIcon(HBITMAP hbm, int cx, int cy) { HIMAGELIST himl = ImageList_Create(cx, cy, ILC_COLOR, 1, 1);

文档评论(0)

139****2640 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档