2017-08-17 72 views
1

我想用一个CFolderPickerDialog实例“另存为”的宗旨的目的。使用CFolderPickerDialog的“另存为”(MFC)

换句话说,用户将输入一个(新)文件夹,其中我可以创建的名称。

随着CFileDialog基类,这可以在施工期间通过的第一个输入参数来完成:

BOOL bOpenFileDialog // TRUE for FileOpen, FALSE for FileSaveAs 

我该如何去实现相同的功能的CFolderPickerDialog实例?

谢谢。

+0

看起来只有打开的对话框支持文件夹选取器模式。从[MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/dn457282(v = vs.85).aspx):_'FOS_PICKFOLDERS'出现一个Open对话框,其中提供了文件夹而不是文件._ - 作为解决方法,您可以使用常规文件保存对话框,并仅使用选定文件路径的文件夹部分。 – zett42

+0

@ zett42:是的,这正是我在阅读下面的答案后想到的。更准确地说,只需创建一个用户选择的名称的文件夹(不管它是否有扩展名)。谢谢! – goodvibration

+0

是的,它让我想起你实际上可以使用完整的“文件”路径作为文件夹路径来创建。另一个建议 - 调用'dialog.GetIFileSaveDialog() - > SetFileNameLabel(L“&Folder:”);'适当地重命名编辑控件的标签。也许你甚至找到一种方法来隐藏文件扩展名组合框('CFileDialog :: HideControl()'也许))。 – zett42

回答

1

你不能CFolderPickerDialog按我的理解,实现这一目标。 我给你解释一下。 CFolderPickerDialog的基类是CFileDialogbOpenFileDialog该标志将允许您启动文件对话框为打开或保存。

因为,CFolderPickerDialog是子类,因此微软必须在构造函数中向父类(CFileDialog)提供调用。如果您从..\Microsoft Visual Studio 14.0\VC\atlmfc\src\mfc\开启dlgfile.cpp,那么您将获得CFolderPickerDialog课程的源代码。

现在来点,如果你观察CFolderPickerDialog构造函数,那么你得到确切的原因,其不可能的。

//////////////////////////////////////////////////////////////////////////// 
// Folder Picker common dialog helper 

CFolderPickerDialog::CFolderPickerDialog(LPCTSTR lpszFolder, DWORD dwFlags, CWnd* pParentWnd, DWORD dwSize, BOOL fNonFileSystemFolders) : 
    CFileDialog(TRUE, NULL, lpszFolder, dwFlags, NULL, pParentWnd, dwSize, TRUE) 
{ 
    m_bPickFoldersMode = TRUE; 
    m_bPickNonFileSysFoldersMode = fNonFileSystemFolders; 
} 

第一标志始终为真,指示不幸的是,CFolderPickerDialog将只在文件打开方式打开。

+1

这不是由MFC包装类“CFolderPickerDialog”支持的参数的问题。底层的公共项目对话框根本不支持保存对话框和文件夹选取器模式的组合。实际上,我甚至试图从'CFileDialog'派生我自己的文件夹选择器对话框,该对话框会将第一个'CFileDialog'参数设置为'FALSE',但这会导致对'IFileDialog :: SetOptions()'的内部调用失败,并带有'E_INVALIDARG' 。 – zett42

+0

谢谢。我想我只会使用在'另存为'模式下配置的'CFileDialog'实例,并且创建一个用户选择的名称的文件夹(不管它是否有扩展名)。 – goodvibration

+0

@ zett42感谢您的信息。我新学这个。不过,我只想指出,CFolderPickerDialog不会支持保存打开标志。 :) –