2010-06-21 159 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