文件预览对话框的实现

本文介绍了如何在资源管理器中实现文件预览功能,不仅限于图片,还包括网页和特定类型如CAD、UG二次开发的文件。通过Shell接口IExtractImage和IShellFolder,从文件中提取预览图像。提供了从文件路径获取PIDL、解析PIDL、获取IShellFolder等关键函数的实现。
摘要由CSDN通过智能技术生成

文件预览可对所有在资源管理器中能够进行图像预览的文件进行预览,而不仅仅只是图片文件。如网页文件,甚至是CAD文件,像作者在进行UG二次开发时就使用了本文所使用的方法预览UG的part文件。
关于怎么定制通用对话框已经有很多文章讲了,这里就不讲了,我这里主要讲的是如何从文件中提取出它的预览图像。

对于文件预览图的提取,系统提供了一个Shell接口,IExtractImage,通过它的Extract方法就可以取出预览图的位图句柄。而IExtractImage接口可以通过IShellFolder接口的GetUIObect方法获得。这个IShellFolder是文件所在文件夹的IShellFolder。要取得任意文件夹的IShellFolder,必须从桌面的IShellFolder开始一级一级的往下找,因为取得IShellFolder需要从其父IShellFolder的BindToObject得到,在其中使用相对的PIDL。整个操作都是以PIDL为基础的,这个PIDL就是外壳命名空间的对象的ID,关于外壳命名空间及项目ID的解释见我的另一篇翻译《外壳命名空间》。下面给出几个有用的函数:

// 从文件的全路径得到它的绝对PIDL
LPITEMIDLIST ParsePidlFromPath(LPCSTR lpszPath)
{
 //存放以Unicode内码表示的路径字符串的缓冲区
 OLECHAR szOleChar[MAX_PATH];

 //“桌面“的IshellFolder接口指针
 LPSHELLFOLDER lpsfDeskTop;

 //返回的PIDL
 LPITEMIDLIST lpifq;

 ULONG ulEaten, ulAttribs;
 HRESULT hres;

 //得到“桌面”的IshellFolderr 接口指针
 SHGetDesktopFol

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值