2

有没有一种标准方法可以在 CFileDialog 中设置文件夹视图(启用 Vista 风格)?我试图让它显示详细信息视图和一些自定义列。

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

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

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

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

4

1 回答 1

2

我认为资源管理器不会在 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
于 2011-08-12T02:07:21.897 回答