如何在 MFC 中使用 CfileDialog 选择特定文件
Posted
技术标签:
【中文标题】如何在 MFC 中使用 CfileDialog 选择特定文件【英文标题】:How to select specific file using CfileDialog in MFC 【发布时间】:2015-02-26 07:05:58 【问题描述】:我想打开一个文件对话框并允许用户只选择名称为“myapplication.ini”的文件,用户只能浏览文件夹以检查文件是否存在以选择它。
所以我遇到了 CFileDialog,除了将其限制为仅显示名称为“myapplication.ini”的文件之外,它几乎可以执行我想要的操作
目前我对 CFiledialog 的使用
CFileDialog FileDialog(TRUE,"features.ini", NULL,OFN_HIDEREADONLY,NULL);
我不确定应该进行哪些更改才能使其按预期工作。
【问题讨论】:
【参考方案1】:这听起来像是一个糟糕的用户界面。即使您过滤掉除该文件之外的所有文件,用户也可以覆盖过滤器。如果您不允许用户选择文件名,为什么要让他们选择?
在我看来,您实际上是在要求用户选择一个文件夹。因此,而不是文件对话框,向他们显示文件夹选择对话框,CFolderPickerDialog
。
【讨论】:
最终用户必须从他的位置选择文件,我的应用程序将只接受特定文件名。所以我不得不限制它。 我完全理解。所以要求用户选择位置而不是文件。使用文件夹选择对话框而不是文件选择对话框。 是的,这也是我的首选解决方案,@David 绝对正确,文件对话框是错误的方法。 +1。 但从用户的角度来看,最好知道特定文件是否在所述文件夹中。【参考方案2】:像这样声明过滤器字符串:
static TCHAR BASED_CODE szFilter[] = _T("features.ini (features.ini)|features.ini|");
然后将其传递给您的CFileDialog
ctor:
CFileDialog FileDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter);
【讨论】:
在我将 szFilter 参数更改为正确参数后它起作用了,编辑了你的答案。谢谢 用户在文件名编辑框中输入*
,回车,所有文件都显示出来了。
您可以通过从 CFileDialog 派生并使用以下代码覆盖 OnInitDone 方法来解决该问题:CWnd* dlgitm = GetParent()->GetDlgItem(edt1); dlgitm->EnableWindow(FALSE);这将禁用文本框文本的编辑。干杯队友
你可以这样做,但它不会让用户感到困惑吗?我知道我会被提供一个带有编辑框的文件对话框感到困惑,但后来发现编辑框被禁用了。以上是关于如何在 MFC 中使用 CfileDialog 选择特定文件的主要内容,如果未能解决你的问题,请参考以下文章