mfc - 在 Visual C++ 中的 MFC 中打开/保存文件时可选择的文件格式
问题描述
我的英语不是很完美,对不起。
我正在使用带有 MFC 的 Visual C++ 2019 社区。
在CFileDialog
课堂上,我希望选择文件编码:UTF-16(小/大端),UTF-8,ANSI 等,在保存时,有或没有签名(2 或字节什么标志编码,在文件的开头)。应该联系它以打开/保存按钮。在 的文档中CFileDialog
,我只能添加单独的按钮,而不是像 Visual Studio、LibreOffice 等那样扩展打开/保存按钮。我该怎么做?我是 MFC 和桌面程序的初学者,但不是 C++ 的初学者。谢谢你。
解决方案
在对您的问题的评论中,您说:
是的,我知道。但是没有地方可以写这个。打开菜单的处理程序是 MFC 的内置部分。在源代码处,
CFileDialog
是不会发生的。我添加了处理程序OnFileOpen()
。这个没有参数,现在是空的,打开的菜单项管理得很好。所以,我不知道我在哪里输入OFN_ALLOWMULTISELCT
。
如果您查看技术说明 22,它会提到:
ID_FILE_OPEN
打开现有文档。笔记
您必须将其连接到您的 -
CWinApp
派生类的消息映射以启用此功能。
CWinApp::OnFileOpen
有一个非常简单的调用实现,CWinApp::DoPromptFileName
后跟CWinApp::OpenDocumentFile
要打开的文件的文件或路径名。CWinApp
实现例程DoPromptFileName
打开标准对话框并用FileOpen
从当前文档模板获得的文件扩展名填充它。一种常见的定制
ID_FILE_OPEN
是定制FileOpen
对话框或添加额外的文件过滤器。推荐的自定义方法是用您自己的FileOpen
对话框替换默认实现,并CWinApp::OpenDocumentFile
使用文档的文件或路径名进行调用。无需调用基类。
如您所见,它指出:
CWinApp
实现例程DoPromptFileName
打开标准对话框并用FileOpen
从当前文档模板获得的文件扩展名填充它。
但DoPromptFileName
似乎是一个未记录的功能。您可以:
- 调试到 MFC 源代码以查看它的作用并在您自己的应用程序类中覆盖它,
- 继续推出您自己的
CWinApp::OnFileOpen
覆盖,它使用您自己的CFileDialog
.
我建议您还阅读CFileDialog
构造函数文档,因为它将帮助您进行基本的自定义。但是,在我看来,您需要按照@sergiol 在评论中所说的去做并显示您自己的CFileDialog
(使用前面描述的任何一种方法)并添加您自己的组合与您的编码选项。然后进行相应处理。
请注意,我没有这种级别的定制经验,但它应该能让你继续前进。
推荐阅读
- css - 使用 CSS 在 SVG 上发光动画
- java - 使用堆栈作为底层数据结构的具有入队和出队的并发队列
- javascript - 无法基于按钮元素“id”调用 JavaScript 方法
- bootstrap-4 - 调整窗口大小时,引导导航栏链接不起作用
- javascript - 如何在承诺中返回布尔值?
- python - 使用 Python 遍历字符串中所有可能的组合
- pandas - 将 pandas 数据附加到 hdf 存储,得到 'TypeError: object of type 'int' has no len()' 错误
- user-interface - 我在格式化窗口时遇到问题。我已经尝试了我能想到的所有包装组合,但没有成功
- spatial - 空间查询 dsl - GeometryExpressions。查找范围包含给定“点”的实体
- spring - 使用 Heroku CLI 部署 Spring Boot 时出错