将CFileDialog的默认视图设置为Large Icon

Set Default view for CFileDialog to Large Icon

本文关键字:Large Icon 设置 视图 CFileDialog 默认      更新时间:2023-10-16

我使用CFileDialog让用户选择要显示的png图像,但对于png文件,我觉得列表视图不合适,因为用户每次都必须将视图更改为大图标,所以需要的是默认情况下将视图设置为"大图标",而不是列表视图。以下是我所做的,请让我知道我应该添加什么才能获得大图标视图。我使用的是Windows 7 VS 2010 MFC C++。

CFileDialog dlg(TRUE, _T("png"), 0, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, _T("Portable Network Graphics (.png)|*.png||"));
    static char szTitle[] = _T("Select Icon");
    dlg.m_ofn.lpstrTitle = szTitle;
    static char szInitPath[] = _T("D:\pngImagelist");
    dlg.m_ofn.lpstrInitialDir = szInitPath;

需要所有专家的帮助。提前感谢:)

您需要获取IShellBrowser并使用QueryActiveShellView来获取shell视图,然后在shell视图上为IFolderView设置QI并调用IFolderView::SetCurrentViewMode。

在vista样式的文件对话框上(即,如果您没有在CFileDialog的构造函数中禁用自动升级,并且您正在vista+上运行),您可以通过其IServiceProvider接口(具有SID_STopLevelBrowser的QueryService)从IFileDialog对象获取IShellBrowser。在Windows 2000样式的文件对话框中,可以向文件对话框发送未记录的消息WM_GETISHELLBROWSER,以获取其IShellBrowser界面。有关示例,请访问https://jiangsheng.net/2021/06/16/better-late-than-never/.

这不是一项容易的任务,因为它需要使用Spy++并了解底层的Windows Shell环境。嵌套在CFileDialog中的列表视图控件实际上是Windows Shell所看到的内容的表示。Spy++将显示它实际上是"ShellDLL_DefView"。您可以使用Paul DiLascia文章中的方法访问此控件。它已经过时了,但是,这个想法应该仍然有效。