CFileDialog ::浏览文件夹

Owe*_*wen 7 mfc visual-c++

当我尝试实例化一个CFileDialog对象时,它会显示文件夹和文件.如何CFileDialog单独为文件夹创建浏览?

Nic*_*kis 11

你做不到CFileDialog.

你可以使用SHBrowseForFolder函数或它的包装器,
CFolderDialog - 选择文件夹.

  • SHBrowseForFolder已经严重过时了。从备注中:_“对于Windows Vista或更高版本,建议您将IFileDialog与FOS_PICKFOLDERS选项一起使用,而不要与SHBrowseForFolder函数一起使用。这是在“选择文件夹”模式下使用“打开文件”对话框,是首选的实现。” _ (2认同)

小智 10

真的很简单.

使用CFolderPickerDialog从类中派生出来的CFileDialog!


Gau*_*ain 7

就像有人提到的,使用CFolderPickerDialog效果很好。我想举例说明如何使用它,特别是在使用多选标志时:

CFolderPickerDialog folderPickerDialog(initialFolder, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_ENABLESIZING, this,
        sizeof(OPENFILENAME));

    CString folderPath;

    if (folderPickerDialog.DoModal() == IDOK)
    {

        POSITION pos = folderPickerDialog.GetStartPosition();

        while (pos)
        {
            folderPath = folderPickerDialog.GetNextPathName(pos);

        }
    }
Run Code Online (Sandbox Code Playgroud)


Bla*_*ada 5

从Vista开始,建议将IFileDialog与FOS_PICKFOLDERS选项一起使用(参见msdn):

CFileDialog od(TRUE/*bOpenFileDialog*/, NULL, NULL,
      OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , NULL, NULL, 0,
      TRUE/*bVistaStyle*/);
   IFileOpenDialog * openDlgPtr = od.GetIFileOpenDialog();
   if ( openDlgPtr != NULL )
   {
      openDlgPtr->SetOptions(FOS_PICKFOLDERS);
      openDlgPtr->Release();
   }

   od.DoModal();
Run Code Online (Sandbox Code Playgroud)

  • 从 Visual Studio 2010 开始,这将不起作用。请改用 CFolderPickerDialog (https://msdn.microsoft.com/ru-ru/library/dd795962%28v=vs.120%29.aspx) (2认同)