还是先亮源码下载地址:https://git.oschina.net/peterxiang/template_IShellPropSheetExt
以下所讲与提供下载的源码不同,但都是一个模子出来的。
下面代码实现的是在所有类型的文件的属性中添加一页,用于显示该文件的完整路径。支持同时选择多个文件并查看。
首先创建一个名为“ShellPropSheetExt”的工程,并添加一个简称为“FileFullPath”的“ATL简单对象”,如果不清楚的请看该文章:
[ShellExtension]图标扩展-IShellIconlayIdentifier实现
这篇文章的开头讲解了,我就不再赘述了。
现在开始讲解如何继承实现“IShellPropSheetExt”和“IShellExtInit”接口来达成目的。
// FileFullPath.h : CFileFullPath 的声明
#pragma once
#include "resource.h" // 主符号
#include "ShellPropSheetExt_i.h"
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Windows CE 平台(如不提供完全 DCOM 支持的 Windows Mobile 平台)上无法正确支持单线程 COM 对象。定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可强制 ATL 支持创建单线程 COM 对象实现并允许使用其单线程 COM 对象实现。rgs 文件中的线程模型已被设置为“Free”,原因是该模型是非 DCOM Windows CE 平台支持的唯一线程模型。"
#endif
# include <vector>//引入头文件,会使用的vector
using namespace ATL;
// CFileFullPath
class ATL_NO_VTABLE CFileFullPath :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFileFullPath, &CLSID_FileFullPath>,
public IDispatchImpl<IFileFullPath, &IID_IFileFullPath, &LIBID_ShellPropSheetExtLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IShellExtInit,//实现初始化接口,