一、如何修改打开/保存文件对话框的后缀名
https://blog.csdn.net/zhangtaohbwh/article/details/47910739
1、主窗口标题栏文本
2、缺省文档名称
3、文档类型名称
4、文档类型描述符
5、文档缺省扩展名
6、文件类型(由RegisterShellFileTypes向注册表注册文件类型,该字符串会被写入注册表)
如果没有用RegisterShellFileTypes函数向注册表注册文件类型,那么是无法通过双击文件打开该文件的,除非通过其他方式向注册表注册了文件类型
7、文件类型名称(存储在注册表中的文件类型名称)
示例:
myMainFrame\nmyGraph\nserializeTest\nGraph(*.aq)\n.aq\nserializeTest.Document\nserializeTest.Document
二、单文档菜单命令响应路由
单文档应用程序中,菜单事件响应顺序:view->doc->frame->app,按优先级排列优先级高的那个类才会响应,只有前者不处理消息的时候,后者才会处理
三、单文档打开命令
可以看到上面的有对菜单id的消息映射,实际上调用的是CWinApp:OnFileNew
void CWinApp::OnFileNew()
{
if (m_pDocManager != NULL)
m_pDocManager->OnFileNew();
}
app ->docManger->CDocTemplate->创建pFrame-> doc::OnNewDocument()
四、文档类对新建、打开、保存(另存为)处理
class CTestDoc : public CDocument
{
protected: // 仅从序列化创建
CTestDoc();
DECLARE_DYNCREATE(CTestDoc)
public:
virtual BOOL OnNewDocument();
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
}
重载上面3个函数处理即可
五、序列化
virtual void Serialize(CArchive& ar);
不建议采用,因为现在有大把的序列化库,比如xml、json,ini等
比MFC自带的序列优秀太多了