【问题标题】:MFC folder browser IFileOpenDialogMFC 文件夹浏览器 IFileOpenDialog
【发布时间】:2013-01-01 09:40:26
【问题描述】:

我正在尝试创建一个简单的 MFC 文件夹浏览器并在 MSDN 和此处寻找答案: 到目前为止,这是我的代码:

void CAddFilterDlg::OnBnClickedAddDll()
{
    CFileDialog dlg(TRUE/*bOpenFileDialog*/, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , NULL, NULL, 0, TRUE/*bVistaStyle*/);
    CString folderPath = dlg.GetFolderPath();
    IFileOpenDialog * openDlg = dlg.GetIFileOpenDialog();
    if ( openDlg != NULL )
    {
       openDlg->SetOptions(FOS_PICKFOLDERS);
       openDlg->Release();
    }

dlg.DoModal();
}

我遇到的错误是:

  1. 不允许指向不完整类类型的指针(这是用于 openDlg)
  2. 标识符“FOS_PICKFOLDERS”未定义

我正在开发 Visual Studio 2010,win7

【问题讨论】:

  • openDlgPtr 在哪里?我在代码 sn-p 中看不到。 “FOS_PICKFOLDERS”在 ShObjIdl.h 中定义,确保包含它
  • 我会修复这个抱歉的 openDlg 而不是 openDlgPtr。我添加了#include "ShObjIdl.h" 它仍然无法识别
  • 您没有正确设置目标窗口版本 (_WIN32_WINNT) 宏。 IFileOpenDialog 仅在 0x600 及更高版本中可用。
  • 您的项目构建是否为 Vista 定义的?您使用的是什么版本的 SDK?

标签: visual-c++ mfc


【解决方案1】:

我知道这是一个有点过时的问题,但我最近遇到了同样的问题,并且还在努力寻找一个简单易用的解决方案。

我发现这个类似 CFileBrowser 的类是解决这个问题的一个非常有效和简单的解决方案:

CFolderPickerDialog FolderSelectDialog(theApp.xAM->GetExportPath().c_str(),NULL,this);

if (FolderSelectDialog.DoModal() == IDOK)
{
    CString cBuff = FolderSelectDialog.GetPathName();

    std::wstring wsPath = std::wstring(cBuff);

    theApp.xAM->SetExportPath(wsPath);

    CEditExportFolderPath.SetWindowTextW(cBuff);
}

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2020-12-31
    • 2018-09-14
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多