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

时间:2011-08-11 20:30:53

标签: com windows-7 mfc windows-shell cfiledialog

是否有标准方法在CFileDialog中设置文件夹视图(启用Vista样式)?我试图让它显示详细信息视图和一些自定义列。

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

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

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

任何指针或其他帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为Explorer不会在Vista / Windows 7中加载列处理程序。

要更改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