【问题标题】:Implementing a Windows Explorer extension view interface实现 Windows Explorer 扩展视图界面
【发布时间】:2011-03-06 13:21:26
【问题描述】:

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

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

我需要在我的项目中为这个按钮实现什么接口?目前我实现了IShellFolder和IShellView。当我在我的命名空间中单击“视图”按钮时,什么也没有发生。没有显示菜单,也没有为用户提供更改视图的选项。

谢谢, 保罗H


编辑:这是我对 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() 永远不会被调用

【问题讨论】:

标签: c++ com atl windows-shell


【解决方案1】:

试试 IFolderView::SetCurrentViewMode

【讨论】:

  • 我已经实现了 IFolderView,但即使我单击资源管理器的“查看”按钮,也不会调用它的任何函数。有可能我执行不正确。它是否需要项目 .rgs 文件中的任何其他注册表项?是否有指向我可以查看的工作实现示例的链接?
  • 我觉得你需要实现IServiceProvider并响应SID_SFolderView
  • Jiang - 查看我的编辑。我已经按照您的建议实现了IServiceProvider,但从未调用过QueryService()
  • 您的 IShellBrowser 实现在哪里?
  • 我认为你也需要实现 IShellView2。
猜你喜欢
  • 2011-08-08
  • 2016-04-09
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
相关资源
最近更新 更多