【发布时间】:2021-07-14 01:19:33
【问题描述】:
使用下面的代码,文件保存对话框按预期显示,带有两个按钮:保存和取消。单击 Cancel 将返回 result=IDCANCEL,但单击 Save 或键入 Enter 不会从 DoModal 返回,只是重新绘制 Filename 窗口。是否有任何原因“保存”按钮不起作用?
// Code below is in a message handler of a modeless dialog
CString defaultExt, filter;
defaultExt = "fits";
filter = "FITS image Files (*.fits)|*.fits|All image files (*.img; *.fits)|*.img; *.fits|All Files (*.*)|*.*||";
CFileDialog dlg(FALSE/*save as*/, defaultExt, "GeneratedImage", OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST, filter, this);
int result = (int)dlg.DoModal(); // does not return if Save is clicked
如果CFileDialog 的可选参数是bVistaStyle=FALSE,则行为相同。
Visual Studio 2019 v16.7.7,32 位调试版本,在 64 位 Windows 7 上构建并运行(在 64 位 Windows 10 上运行的结果相同)。
【问题讨论】:
-
OFN_PATHMUSTEXIST在保存对话框中看起来很奇怪。在单击“保存”之前,您实际上指定了文件名吗? -
OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST的组合意味着: (a) 您只能使用现有文件保存到; (b) 当你指定这样一个文件时,你会得到一个弹出窗口询问,“你确定要覆盖这个文件吗?” (或类似的东西)。如果您没有看到后者,那么您没有给出可接受的文件名。 -
@j6t:默认文件名(“GeneratedImage”)出现在文件名框中。
-
@Adrian Mole:目的是(1)提示用户是否要覆盖现有文件; (2) 目录必须存在。但是我看到,由于“文件保存”对话框已经给出了目录,因此该标志没有意义。但是,删除
OFN_PATHMUSTEXIST不会改变行为。
标签: c++ cfiledialog