2017-01-30 6 views
1

Я новичок в расширениях пространства имен. Я пытаюсь отключить панель «Навигация» для расширения пространства имен.Как получить вызовы GetFolder (IID_ExplorerPaneVisibility)

У меня есть реализация представления оболочки Shell IFolderView :: GetFolder, которая возвращает объект IShellFolder. Класс оболочки Shell реализует метод IExplorerPaneVisibility :: GetPaneState.

Но я не получаю вызовы GetFolder (IID_ExplorerPaneVisibility). Может кто-то помочь мне с этим?

STDMETHODIMP ShellFolderViewImpl::GetFolder(REFIID riid, VOID ** ppv) 
{ 
    if (riid == IID_IExplorerPaneVisibility) 
    { 
     this->QueryInterface(riid, (void**)ppv); 
    } 
    return S_OK; 
} 

STDMETHODIMP ShellFolderViewImpl::GetPaneState(REFEXPLORERPANE ep,EXPLORERPANESTATE * peps) 
{ 
    if (ep == EP_NavPane) 
     *peps = EPS_DEFAULT_OFF; 
    else if (ep == EP_Commands) 
     *peps = EPS_DEFAULT_OFF; 
    else if (ep == EP_DetailsPane) 
     *peps = EPS_DEFAULT_OFF; 
    else if (ep == EP_AdvQueryPane) 
     *peps = EPS_DEFAULT_OFF; 
    else if (ep == EP_QueryPane) 
     *peps = EPS_DEFAULT_OFF; 
    else 
     *peps = EPS_DONTCARE; 
    return S_OK; 
} 

ответ

0

MSDN говорит

Реализация IExplorerPaneVisibility извлекается из папки Shell . Папка «Шелл», в свою очередь, извлекается из представления.

Я интерпретирую это как; он отправит QueryInterface ваш IShellFolder, чтобы получить реализацию IExplorerPaneVisibility.

Вы также должны проверить this newsgroup thread, он показывает несколько обходных решений, которые могут потребоваться, чтобы отключить некоторые из панелей.

Надеюсь, ваш код здесь не является вашей реальной реализацией, вы никогда не должны возвращать S_OK в GetFolder для вещей, которые вы не узнаете!