0

使用下面的代码,文件保存对话框按预期显示,带有两个按钮:保存和取消。单击 Cancel 会返回result=IDCANCEL,但单击 Save 或键入 Enter 不会返回 from 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如果 的可选参数is ,则行为是相同的bVistaStyle=FALSE

Visual Studio 2019 v16.7.7,32 位调试版本,在 64 位 Windows 7 上构建并运行(在 64 位 Windows 10 上运行的结果相同)。

4

2 回答 2

0

您的过滤器字符串也有问题。您不应该在模式字符串中包含空格。

oldFilter = "FITS image Files (*.fits)|*.fits|All image files (*.img; *.fits)|*.img; *.fits|All Files (*.*)|*.*||";
--- REMOVE THIS SPACE --------------------------------------------------------------^

newFilter = "FITS image Files (*.fits)|*.fits|All image files (*.img; *.fits)|*.img;*.fits|All Files (*.*)|*.*||";

在此处查看 lpstrFilter 成员文档: https ://docs.microsoft.com/en-us/windows/win32/api/commdlg/ns-commdlg-openfilenamew#members

于 2021-04-19T21:19:20.620 回答
0

找到问题了,有点。显然您无法将文件保存到库中。

在 Windows 7 中,导航到左侧窗格中的库/文档会在右侧窗格中显示“文档库,包括 2 个位置”。然后,单击保存什么也不做。如果选择了不同的另存为类型,我可以保存。

如果我导航到一个简单的文件夹,没有问题;文件始终可以保存。

CFileDialog表现得好像库是只读的,但取决于从过滤器中选择的文件类型和在“文件名”框中选择的扩展名。

也许有人知道CFileDialog详细描述的功能在哪里。

于 2021-04-21T16:44:07.233 回答