XImageDialog,带图像预览的打开文件对话框

现在很多程序打开文件时都带图像预览,比如 QQ 也有,但是功能很弱,唯一我觉得还比较可以的,就是 Axialis IconWorkshop,它还可以支持从 .exe .dll .ocx 中提取图标来进行预览,不过人家是商业软件,要 $ 的。俺是要钱没有,烂命一条,自己动手,丰衣足食:)

先把最终的效果图拿出来看看:

 

预览图1

 

预览图2

 

预览图3

 

自己动手开发过程中,才发现其实要解决的问题还是挺多的,首先是继承 CFileDialog 的问题,解决控件位置的布局,要随窗口大小变化而保持相对位置不对;然后是要核心功能,要突出自己的亮点:我自己开发的预览,可以支持动态 GIF 预览!这一点是 Axialis IconWorkshop 和 Photoshop 暂时都还没有做到的,还可以调整预览时的背景色,方便查看图像。当然,要支持动态 GIF,MFC 内置的 CImage 已经不可用了,必须自己拿 GDI+ 起家,获取对象类型,判断是 GIF 动画之后起线程以显示动态连续画面,从而构成动画。

至于动态调整背景色,本来是想采用 CMFCColorButton 的,但是这个鬼东西,在常规对话框上都好好的,就是用在 CCommonDialog 的派生类上就会有问题,表现在:下拉出来的颜色面板,在失去鼠标焦点时没能关闭,点程序其他任何地方都不响应,必须选择一种颜色才能关闭。猜测可能是由于 capture 鼠标造成的,查看源代码,果不其然。于是为了解决这个问题,尝试自己派生 CMFCColorButton,处理 WM_CAPTURECHANGED 和 WM_KILLFOCUS 消息,向它的子窗口,调色面板,发送 WM_CLOSE 消息。这个问题表面上是解决了,但是随之而来的是, 测试的时候发现如果禁用 m_bAutoFocus 都可以,但是如果启用 m_bAutoFocus,也就是默认调色板获得焦点,这时候又会出一堆 ASSERT 错误,烦啊烦,想想如果没有安装 Visual Studio 2008 sp1,界面还显示不正常了,干脆懒得折腾了,另想其他办法。看到左边的标准空间,于是决定采用 CToolBarCtrl,自动判断编译环境,是采用 BCG 样式的颜色选择框还是操作系统内置的颜色选择框。这个问题才算解决。顺便给 CToolBarCtrl 加了个 ToolTip。

 

总结一下,自己开发的这个功能点的优缺点:

1、格式广泛,GDI+ 支持的图像都能预览;

2、支持 GIF 动画预览;

3、支持动态更改预览背景色;

4、界面还算比较清爽,个人的一贯风格:)

5、支持初始化指定视图模式:图标、缩略图等(系统默认为列表显示);

6、支持初始化时指定初始预览图像,可用于保存对话框(QQ 的暂不支持);

7、暂不支持 .exe .dll 中提取图标进行预览,因为没想要继续开发下去,毕竟 GDI+ 支持的图像格式已经很广了;当然,如果以后要进一步完善,也可以继续;

 

暂时就只想到这么多,发上来留个纪念一下。

 

 

hoho,今天有时间,来继续修改完善了一下,加了两个图标,上一页和下一页,用于显示多帧图像(TIF),以支持手动翻页。上图:

预览图4

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值