将CFileDialog的默认视图设置为大图标

时间:2013-12-07 06:44:29

标签: c++ mfc openfiledialog

我正在使用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;

需要所有专家的帮助。在此先感谢:)

2 个答案:

答案 0 :(得分:1)

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

在vista样式文件对话框中(即,如果你没有在CFileDialog的构造函数中禁用自动升级,并且你在Vista +上运行),你可以通过它的IServiceProvider接口从IFileDialog对象获取IShellBrowser(QueryService)使用SID_STopLevelBrowser)。在Windows 2000样式文件对话框中,您可以将未记录的消息WM_GETISHELLBROWSER发送到文件对话框以获取其IShellBrowser接口。可以在http://blog.joycode.com/jiangsheng/archives/2004/09/17/33756.joy找到一个示例。

答案 1 :(得分:0)

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