文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[VC6] 图像文件查看器

[VC6] 图像文件查看器

时间:2010-09-05  来源:hoodlum1980

    在今天较少有情况需要去研究图像的文件格式,除非某些特定场合。在这里我还是去先做了这样一个小工具,并初步实现了展示BMP文件格式内容的功能。我的本意是还要为它添加展示ICO文件格式。这里BMP文件的格式是最基本的,所以它是我第一个加入的功能,关于它的文件格式主要参考了MSDN中的相关说明。

    本文的关键词:TreeList Control,BMP文件格式,CxImage,MFC,C++,VC。

    本文的参考资料请见本文结尾。

    该工具的截图如下:

    

 

    (1)本文参考和使用了 TreeList 控件,关于该控件的原始来源可能不是非常确切,我没有去考究。可以从参考资料上获取资料。关于该控件,相当于TreeCtrl 和 ListView 的综合体,不属于标准控件。所以需要自定义。我的最初想法是以VC中的List控件为基础,在内存中维护一个Tree的数据结构,然后通过List的用户绘制来完成这个控件。不过我在 http://www.codeproject.com/ 上看到的 TreeList 控件基本都是以 TreeCtrl 为基础 + 用户绘制来实现的。大家都这样选择,有可能是因为:

    (a)最初作者采用了以TreeCtrl为基础实现,后续的人员参考了它,从而被继承下来。

    (b)用TreeCtrl为基础要比以List为基础实现更方便,工作量更小。

    但不管怎么样,我们可以比较下这两种方式。

    (a)TreeCtrl为基础:优点是从基础控件继承得到了鼠标导航,鼠标点击,双击等对Tree的处理,不需要我们做更多编码。缺点是鼠标操作不够友好,TreeCtrl的HitTest几乎失效(因为基础控件的节点文本无法完全模拟看到的效果),做水平滚动时,由于基础控件没有移动,所以对鼠标的一些操作也不够友好。(这些都属于原控件的一些缺点,我对源码家了很多修正和功能,使大部分瑕疵和缺点被弥补和修正)。

    (b)List为基础,优点时自定义绘制非常灵活,由于该控件的行为和外观本质上更接近List,所以可以想见,这样实现的控件对滚动,标题头等鼠标操作都会非常正确。缺点是我们必须自己维护一个TreeCtrl的逻辑结构,动态的对List进行Item的增删处理,对Tree的相关鼠标键盘(例如折叠展开按钮)操作也必须手工添加。这样无疑对我们来说是一个不小的维护负担。并且由于精力限制,暂时我们就取用前人已经得到的成果。

 

    我对原始的TreeCtrl做了很多修改,添加了一些特性,例如是否绘制Grid网格,设置背景色,网格颜色,设置是否可以点击标题头进行排序等,同时也修改了一些绘制和鼠标响应的代码,基本上是这个控件的可用性,易用性,用户友好型改进很多,它可以基本流畅的使用和完成我想要的功能了,即清晰的展示一系列文件信息。关于该控件,也许我还可以单独再写一篇文章去介绍它,包括我对它的改进,以及如何把它添加到你的MFC应用程序中。这篇文章可以看着是对这个控件的一个范例应用。

 

    (2)由于位图有很多种,例如索引,真彩色,等,不一定和我们绘制的DC能完全兼容,所以我最终还是决定引入了CxImage的代码,来做预览图的绘制。当然,如果你不需要预览图片,那么所有CxImage的代码是不需要的。

 

    本工具可结合16进制编辑器,去查看文件的原始数据,其中“地址”为文件地址(16进制),大小为10进制(字节为单位)。对于BMP的文件格式来说已经基本没有什么技术上的研究点可言,不过对于ICO,GIF, JPG等其他图像类型的文件格式,则依然还是不够明确的,当然除非做一些文件格式插件,则没有必要去关注这些内容。下一步我打算增加对ICO文件(图标,光标)的文件格式的展示。

 

    【注意】为了简单起见,在代码中我并没有去严格校验文件数据的合法性,我假设读取的BMP文件都是正确的有效的位图文件,所有的内存分配也假设不会失败。这样可以使我们的相关读取文件的代码变得非常简洁和直观,但在实际开发工作中是不能省略对异常情况的处理的。

 

    这个小程序是使用VC6 + MFC来开发的,由IDE自动生成的一些特征符号,我并没有去改动,例如应用程序的图标,关于对话框等,这些外在特征都和特定的IDE版本和技术相关联,你可以很明显的看出它是用VC6和MFC开发的。对TreeList控件代码中的例如窗口类名等信息也未作改动,以示对原作者的尊重。

 

    本文的源代码下载链接:

    http://files.cnblogs.com/hoodlum1980/BmpFileView_Src.rar

 

    【参考资料:】

    关于TreeList控件,在codeproject网站上搜索 TreeList 即可。

 

    (1)Extended Tree List Control;

    (2)Tree Control with Columns;

 

    关于CxImage,可以加载多种图像格式(例如BMP,JPG,GIF,ICO,PNG等等)的文件。

    (3)CxImage version 6.0.0 02/Feb/2008

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载