将CFileDialog的默认视图设置为Large Icon
Set Default view for CFileDialog to Large Icon
我使用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文章中的方法访问此控件。它已经过时了,但是,这个想法应该仍然有效。
- fopen 在创建大量文件后因 EFBIG "File too large" 而失败
- Golang CGO with large char pointer语言 - SEGSERV
- Large digit numbers
- MPI_Scatterv/ Gatherv 使用带有"large" 2D 矩阵的C++会引发 MPI 错误
- (3^n + 2^n) % 10 for large n
- --icon 选项不适用于 Qt > 5.5 中的 QApplication
- 将 Icon 添加到可执行文件 (Eclipse CDT Luna) 时出现问题:make: *** 没有规则来制作目标 'resources.o'
- 将CFileDialog的默认视图设置为Large Icon
- '(QMessageBox::Icon)1u'不能用作函数
- 在非 gui 线程中获取文件图标 (QFileIconProvider::icon)
- 返回班级私有会员"large"好做法是什么?
- "Large" 使用 C++ Qt 和 Qt xlsx 模块读取 xlsx 文件
- Large PCIe DMA Linux x86-64
- 如何追踪"tcmalloc : large alloc .... "
- C++文件输入流:读取"large"整数
- 如何在Windows Server 2012上工作时出现"OverflowError: Python int too large to convert to C long"错误进行转换?
- 读取'large' C++中的数据文件
- Emscripten Uncaught RangeError: Source is too large, multipl