MFC CFileDialog窗口问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC CFileDialog窗口问题相关的知识,希望对你有一定的参考价值。

CFile File=0;
CFileDialog mFileDlg(TRUE,0,0,OFN_HIDEREADONLY," 位图文件|*.bmp| 所有文件|*.*||",this);

这个是网上摘的程序片段 但是我运行的时候 其他部分都没有问题 只有这里显示
Error 1 error C2440: 'initializing' : cannot convert from 'int' to 'CFile'
Error 2 error C2664: 'CFileDialog::CFileDialog(BOOL,LPCTSTR,LPCTSTR,DWORD,LPCTSTR,CWnd *,DWORD,BOOL)' : cannot convert parameter 5 from 'const char [32]' to 'LPCTSTR'
这是为什么呢?本人菜鸟,求救~~~~~~~(>_<)~~~~
CFile File=0;
CFileDialog dlg(TRUE,0,0,OFN_HIDEREADONLY," 位图文件|*.bmp| 所有文件|*.*||",this);
我改了一下
CFile File;
CFileDialog dlg(TRUE,0,0,OFN_HIDEREADONLY,(LPCTSTR)" 位图文件|*.bmp| 所有文件|*.*||",this);
就可以了 这是为什么?糊涂。。。

第一个错误:你不能把0赋值给CFile对象,这是一个类对象,不是数值类型.
第二个错误:" 位图文件|*.bmp| 所有文件|*.*||"被编译器识别为字符数组,而CFileDialog的构造函数第5个参数要求的是LPCTSTR类型,两个类型不一致,如果你认为强制转换没问题可以加强制转换,这样编译器就当他没问题,通过了.
参考技术A File是个CFile类对象,不是int什么整型变量,不能直接赋值为0。 参考技术B CFile File=0;隐式转换成CFile File=CFile(0),构造函数没有一个参数的
LPCTSTR=const char* 指向只读变量的指针,不能使用该指针修改变量
" 位图文件|*.bmp| 所有文件|*.*||"是常量,什么时候都不能修改
无法让编译器隐式转换
参考技术C 应该是这里出了毛病。

如何在 MFC 中使用 CfileDialog 选择特定文件

【中文标题】如何在 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窗口问题的主要内容,如果未能解决你的问题,请参考以下文章

在 CFileDialog (MFC) 中设置文件夹视图

mfc CFileDialog类

MFC CFileDialog的问题...

MFC中CFileDialog使用方法

如何在 MFC 中使用 CfileDialog 选择特定文件

MFC CFileDialog 只打开选择文件