Com 在CFileDialog(MFC)中设置文件夹视图

Com 在CFileDialog(MFC)中设置文件夹视图,com,windows-7,mfc,windows-shell,cfiledialog,Com,Windows 7,Mfc,Windows Shell,Cfiledialog,是否有一种标准方法可以在启用CFileDialog Vista样式的情况下设置文件夹视图?我试图让它显示细节视图和一些自定义列 我已经实现了一个Windows7列处理程序,它为我的应用程序创建的文件显示特定于应用程序的信息。但是,为了在资源管理器窗口或公共文件对话框中查看这些自定义列,我必须手动将文件夹视图设置为“详细信息”,然后选择所需的特定列 这很好,但目标是应用程序中的文件选择器在“详细信息”视图中自动显示这些列,前提是用户更改视图样式 我已经研究了各种方法来实现这一点,但还没有找到可行的

是否有一种标准方法可以在启用CFileDialog Vista样式的情况下设置文件夹视图?我试图让它显示细节视图和一些自定义列

我已经实现了一个Windows7列处理程序,它为我的应用程序创建的文件显示特定于应用程序的信息。但是,为了在资源管理器窗口或公共文件对话框中查看这些自定义列,我必须手动将文件夹视图设置为“详细信息”,然后选择所需的特定列

这很好,但目标是应用程序中的文件选择器在“详细信息”视图中自动显示这些列,前提是用户更改视图样式

我已经研究了各种方法来实现这一点,但还没有找到可行的解决方案。shell属性包似乎存储列类型和宽度以及视图样式,但其中大部分是二进制的,没有明显的文档记录。如果复制行李属性,我可以切换视图设置,但这似乎很脆弱


任何指点或其他帮助都将不胜感激

我认为浏览器不会在Vista/Windows7中加载列处理程序

要在“vista文件”对话框中更改视图设置,请执行以下操作:

Check OS version (needs Vista or higher)    
Not sure which event is raised on startup, OnFolderChange maybe?
assuming OnFolderChange is raised, override CFileDialog::OnFolderChange:
call GetIFileSaveDialog/GetIFileOpenDialog to get IFileDialog
//begin undocumented behavior 
QI for IServiceProvider from IFileDialog
QS for SID_SFolderView with IID_IFolderView2
call IFolderView2::SetViewModeAndIconSize
//end undocumented behavior
clean up COM interfaces
或者,您可以尝试未记录的方法2

//begin undocumented behavior 
QI for IServiceProvider from IFileDialog
QS for SID_STopLevelBrowser with IID_IShellBrowser
call IShellBrowser::QueryActiveShellView to get IShellView
QI IFolderView2 from IShellView
call IFolderView2::SetViewModeAndIconSize
//end undocumented behavior
clean up COM interfaces

我将其称为列处理程序,但它使用属性系统COM接口来处理显示自定义列和进入其中的数据。这在Vista和XP上的7中运行良好,我需要实现之前的IColumnProvider,但这是另一回事。谢谢,我会调查这个方法。我希望我有足够的因果报应投票给你。最终结果使用IFileDialog->IServiceProvider中的IFoldServiceW2将视图更改为详细信息模式。然后使用IServiceProvider->IShellBrowser->IShellView中的IColumnManager,我能够使用自定义列的属性存储道具键设置列。多谢。