2010-06-21 162 views
2

我有一个Visual Studio 2008 C++ ATL项目,它是Windows资源管理器的命名空间扩展。实现Windows资源管理器扩展视图界面

在Windows XP中Windows资源管理器的工具栏螺纹钢中,有一个标有“视图”的图标。在普通视图中,它会创建一个允许用户选择“缩略图”,“瓦片”,“图标”,“列表”或“细节”作为视图类型的下拉菜单。

我需要在我的项目中为此按钮实现什么接口?目前,我实现了IShellFolder和IShellView。当我在我的命名空间中单击“视图”按钮时,没有任何反应。没有菜单显示,用户也没有改变视图的选项。

感谢, PaulH


编辑:这是我的实现IShellView,IServiceProvider的,和IFolderView

class ATL_NO_VTABLE CShellViewImpl : 
    public CComObjectRootEx<CComSingleThreadModel>, 
    public CComCoClass< CShellViewImpl, &CLSID_ShellViewImpl >, 
    public IDispatchImpl< IShellViewImpl, 
          &IID_IShellViewImpl, 
          &LIBID_MyLib, 
          /*wMajor =*/ 1, 
          /*wMinor =*/ 0 >, 
    public IShellView, 
    public IServiceProvider, 
    public IFolderView 
{ 
public: 
    DECLARE_REGISTRY_RESOURCEID(IDR_SHELLVIEWIMPL) 

    BEGIN_COM_MAP(CShellViewImpl) 
     COM_INTERFACE_ENTRY(IShellViewImpl) 
     COM_INTERFACE_ENTRY(IServiceProvider) 
     COM_INTERFACE_ENTRY(IDispatch) 
     COM_INTERFACE_ENTRY(IShellView) 
     COM_INTERFACE_ENTRY(IFolderView) 
    END_COM_MAP() 

    DECLARE_PROTECT_FINAL_CONSTRUCT() 

    // IXYZ implementations... 
}; 

的IServiceProvider :: QueryService的()是从来没有所谓的

+0

find here,sample to帮助你:[一体式代码框架示例目录](http://1code.codeplex.com/wikipage?title=All-In-One%20Code%20Framework%20Sample%20Catalog) – lsalamon 2010-07-01 13:34:01

回答

0

尝试IFolderView :: SetCurrentViewMode

+0

我已经实现了IFolderView,但即使当我点击资源管理器“查看”按钮时,也不会调用它的任何函数。这可能是我错误地实现了它。它是否需要项目.rgs文件中的任何其他注册表项?有没有链接到我可以看到的工作实现的例子? – PaulH 2010-06-22 14:49:12

+0

我认为你需要实现IServiceProvider并且响应SID_SFolderView – 2010-06-22 17:30:42

+0

Jiang - 请参阅我的编辑。我按照你的建议实现了'IServiceProvider',但是'QueryService()'永远不会被调用。 – PaulH 2010-06-22 17:41:31