我在我的代码中创建了一个IExplorerBrowser实例,用于在我的一个对话框中创建自定义I / O视图。我在我的宿主类中实现了IServiceProvider和ICommDlgBrowser接口。我使用IExplorerBrowser :: BrowseToIDList方法来填充视图。
我想过滤显示的文件类型(例如只有PNG文件)。如果我用 FOLDERID_Pictures (即“我的图片”)调用BrowseToIDList,我可以使用ICommDlgBrowser :: IncludeObject方法或IFolderFilter :: ShouldShow来限制我允许显示的文件。但是,如果我浏览到Windows 7上的图片库( FOLDERID_PicturesLibrary ),则不会调用ICommDlgBrowser :: IncludeObject和IFolderFilter :: ShouldShow。
在Win7上过滤我不知道的库中的文件是否有一些限制?也许我错过了一个界面,或者我在某个地方指定了错误的标志。
非常感谢任何想法。
答案 0 :(得分:2)
我有机会进一步研究这个问题,包括向一些微软开发人员提出几个问题。遗憾的是,过滤不适用于查询支持的视图(即库)。
我的方法的另一种方法是使用Common Item Dialog和应用程序添加的控件(通过IFileDialogCustomize)。
(http://msdn.microsoft.com/en-us/library/bb776913(VS.85).aspx)
在我的具体情况下,我无法使用Common Item Dialog,但我认为在此处发布此信息以供将来参考可能是值得的。
如果将来我找到任何方法来过滤IExplorerBrowser控件,我也会在这里发布。
答案 1 :(得分:1)
我自己遇到过这个问题。
然而我进一步研究了它。 IExplorerBrowser
创建(在我的Windows 7 x64计算机上)ExplorerBrowserControl
类的窗口。它本身创建了一个DUIViewWndClassName
类的窗口。并且同一个窗口(DUIViewWndClassName
)用作IFileOpenDialog
创建的对话框的控件。甚至窗口过程都是相同的,因此没有子类化(但我没有检查该控件的每个子窗口。)
文件对话框甚至可以在库文件夹中按文件类型进行过滤。所以我想IExplorerBrowser
(或它使用的控件)确实允许只有微软不分享知识如何做到这一点。或者,如果确实如此,那就是它隐藏的知识。
但是我使用了IFolderFilterSite
(来自IExplorerBrowser
的{{1}}支持的界面)。在这种情况下,库文件夹不会调用CLSID_ExplorerBrowser
。我无法调用IFolderFilter::ShouldShow
(即使我没有设置任何ICommDlgBrowser::IncludeObject
)。
IFolderFilter
。不知怎的,我忘记了我必须通过ICommDlgBrowser::IncludeObject
而不是ICommDlgBrowser
提供IServiceProvider::QueryService
。但是仍然没有为库文件夹调用IUnknown::QueryInterface
。
答案 2 :(得分:-1)
我尝试使用IShellFolderViewDual3-> FilterView()
但这是搜索结果
谢谢。
IShellView * pShellView;
IDispatch * pDSFV;
IShellFolderViewDual3 * pSFVD3;
m_pExplorerBrowser-> GetCurrentView(IID_PPV_ARGS(安培; pShellView));
pShellView-> GetItemObject(SVGIO_BACKGROUND,IID_PPV_ARGS(& pDSFV));
pDSFV->的QueryInterface(IID_PPV_ARGS(安培; pSFVD3));
pSFVD3-> FilterView(bstrVal);