Windows 7 如何在Windows 7库中的IExplorerBrowser中按文件类型进行筛选?

Windows 7 如何在Windows 7库中的IExplorerBrowser中按文件类型进行筛选?,windows-7,libraries,Windows 7,Libraries,我在代码中创建了IExplorerBrowser的实例,以便在其中一个对话框中创建自定义I/O视图。我已经在宿主类中实现了IServiceProvider和ICommDlgBrowser接口。我使用IExplorerBrowser::BrowseToIDList方法填充视图 我想过滤显示的文件类型(例如,仅PNG文件)。如果我使用FOLDERID_图片(即“我的图片”)调用BrowseToIDList,我可以使用ICommDlgBrowser::IncludeObject方法或IFolderFi

我在代码中创建了IExplorerBrowser的实例,以便在其中一个对话框中创建自定义I/O视图。我已经在宿主类中实现了IServiceProvider和ICommDlgBrowser接口。我使用IExplorerBrowser::BrowseToIDList方法填充视图

我想过滤显示的文件类型(例如,仅PNG文件)。如果我使用FOLDERID_图片(即“我的图片”)调用BrowseToIDList,我可以使用ICommDlgBrowser::IncludeObject方法或IFolderFilter::ShouldShow来限制允许显示的文件。但是,如果我浏览到Windows 7上的图片库(FOLDERID_PicturesLibrary),则不会调用ICommDlgBrowser::IncludeObject或IFolderFilter::ShouldShow

在Win7上过滤库中我不知道的文件有什么限制吗?可能我缺少一个接口,或者可能我在某个地方指定了错误的标志


任何想法都将不胜感激。

我有机会对此进行进一步研究,包括向一些Microsoft开发人员提问。不幸的是,过滤似乎不适用于查询支持的视图(即库)

我的方法的另一种选择是使用带有应用程序添加控件的公共项对话框(通过IFileDialogCustomize)

()

在我的特定情况下,我无法使用公共项对话框,但我认为可能值得在此处发布此信息以供将来参考


如果将来我能找到任何方法来过滤IExplorerBrowser控件,我也会在这里发布。

我自己也遇到了这个问题

然而,我已经对此进行了进一步的调查
IExplorerBrowser
创建(在我的Windows 7 x64机器上)
ExplorerBrowserControl
类的窗口。它本身创建了一个
DUIViewWndClassName
class的窗口。同样的窗口(
DUIViewWndClassName
)被用作由
IFileOpenDialog
创建的控件对话框。甚至窗口过程都是相同的,所以没有子类化(但我没有检查该控件的每个子窗口)

即使在库文件夹中,文件对话框也可以按文件类型进行过滤。因此,我猜IExplorerBrowser(或它使用的控件)确实允许只有Microsoft不分享如何做到这一点的知识。或者,如果它真的这样做了,那么它的一些隐藏的知识

但我是通过
IFolderFilterSite
获得它的(由
CLSID\u ExplorerBrowser
提供的
IExplorerBrowser
支持的接口)<代码>IFolderFilter::ShouldShow在这种情况下不为库文件夹调用。我无法调用
ICommDlgBrowser::IncludeObject
(即使我没有设置任何
IFolderFilter



编辑:我设法调用了
ICommDlgBrowser::IncludeObject
。不知怎的,我忘记了我必须通过IServiceProvider::QueryService而不是通过IUnknown::QueryInterface提供
ICommDlgBrowser
。但是库文件夹仍然没有调用ICommDlgBrowser::IncludeObject。

我尝试使用IShellFolderViewDual3->FilterView() 但这是搜索结果。
谢谢。

IShellView*pShellView
IDispatch*pDSFV
IShellFolderViewDual3*pSFVD3

m_pExplorerBrowser->GetCurrentView(IID_PPV_ARGS(&pShellView))
pShellView->GetItemObject(SVGIO_背景、IID_PPV_参数(&pDSFV))
pDSFV->查询接口(IID_PPV_参数(&pSFVD3))

pSFVD3->FilterView(bstrVal)

我还做了一些(仍然不成功)的实验,并在MSDN论坛上提出了这个问题:。这篇文章的目的不清楚。请补充一些解释。你是说这是问题的解决方案吗?或者,您正在就类似问题寻求帮助?:“请注意,如果通过调用
IFolderFilterSite::SetFilter
在浏览器上设置了文件夹筛选器,则客户端不会收到对
ICommDlgBrowser::IncludeObject
的调用。”