Реализация интерфейса просмотра расширения проводника Windows

У меня есть проект Visual Studio 2008 C++ ATL, который является расширением пространства имен для проводника Windows.

На панели инструментов проводника Windows в Windows XP есть значок с надписью «представления». В обычном представлении он создает раскрывающееся меню, которое позволяет пользователю выбрать «Миниатюры», «Плитки», «Значки», «Список» или «Подробности» в качестве типа представления.

Какой интерфейс мне нужно реализовать в моем проекте для этой кнопки? В настоящее время я реализую 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() никогда не вызывается


person PaulH    schedule 21.06.2010    source источник
comment
найти здесь образец, который поможет вам: All- Каталог примеров In-One Code Framework   -  person lsalamon    schedule 01.07.2010


Ответы (1)


Попробуйте IFolderView::SetCurrentViewMode

person Sheng Jiang 蒋晟    schedule 22.06.2010
comment
Я реализовал IFolderView, но ни одна из его функций не вызывается, даже когда я нажимаю кнопку просмотра Проводника. Возможно, я реализовал это неправильно. Требуются ли какие-либо дополнительные записи реестра в файлах проекта .rgs? Есть ли ссылка на пример рабочей реализации, на которую я мог бы посмотреть? - person PaulH; 22.06.2010
comment
Я думаю, вам нужно реализовать IServiceProvider и ответить SID_SFolderView - person Sheng Jiang 蒋晟; 22.06.2010
comment
Цзян – Смотрите мою правку. Я реализовал IServiceProvider, как вы предложили, но QueryService() никогда не вызывается. - person PaulH; 22.06.2010
comment
Где ваша реализация IShellBrowser? - person Sheng Jiang 蒋晟; 24.06.2010
comment
Я думаю, вам также нужно реализовать IShellView2. - person logicnp; 30.06.2010