孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理
2007-12-25 14:52
363 查看
WM_FILE_NEW消息响应原理
当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,
它的响应函数应该叫OnFileNew(),但是在代码中找不到,
通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument(),
WM_FILE_NEW的消息是如何响应的呢?
我们可以在VC++的安装目录下找到一个文件
../Microsoft Visual Studio/VC98/MFC/SRC/APPDLG.CPP
在这个文件中,有一个CWinApp::OnFileNew()函数,它是这样定义的:
Void CWinApp::OnFileNew()
{ if (m_pDocManager !=NULL) m_pDocManager->OnFileNew();}
m_pDocManager是这样定义的:CDocManager * m_pDocManager;
CDocManager 是一个文档管理器,它有一个指针链表,维护一系统的文档模版指针。
接着,我们可以在../Microsoft Visual Studio/VC98/MFC/SRC/DOCMGR.CPP文件中找到
CDocManager::OnFileNew()的定义。
再次按下“新建”按钮时,由于框架类对象和视类对象已经创建了,在单文档中没有必要重复创建,
它会重复利用已经创建好的框架类对象和视类对象。
如果是多文档程序则会重复创建框架类对象、视类对象和文档类对象。
---------------------------------------------------------------------------------
按下“打开”与“保存”按钮时,会执行CGraphicDoc::Serialize方法
在CGraphicDoc类中有个Serialize(CArchive& ar)方法,是文档类提供的用来保存数据和加载数据的函数,其参数就是一个CArchive对象。
注意:如果将一个文件保存之后,马上打开它,程序将不会调用本方法加载数据,
因为当我们保存数据的时候,以前创建的文档类对象与保存的数据关联在一起了,
再次打开刚保存的文件时,MFC框架内部识别出是同一份数据,因为与数据相关的文档类指针已经存在
所以程序不会调用Serialize(CArchive& ar)方法加载相同的数据。
当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,
它的响应函数应该叫OnFileNew(),但是在代码中找不到,
通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument(),
WM_FILE_NEW的消息是如何响应的呢?
我们可以在VC++的安装目录下找到一个文件
../Microsoft Visual Studio/VC98/MFC/SRC/APPDLG.CPP
在这个文件中,有一个CWinApp::OnFileNew()函数,它是这样定义的:
Void CWinApp::OnFileNew()
{ if (m_pDocManager !=NULL) m_pDocManager->OnFileNew();}
m_pDocManager是这样定义的:CDocManager * m_pDocManager;
CDocManager 是一个文档管理器,它有一个指针链表,维护一系统的文档模版指针。
接着,我们可以在../Microsoft Visual Studio/VC98/MFC/SRC/DOCMGR.CPP文件中找到
CDocManager::OnFileNew()的定义。
再次按下“新建”按钮时,由于框架类对象和视类对象已经创建了,在单文档中没有必要重复创建,
它会重复利用已经创建好的框架类对象和视类对象。
如果是多文档程序则会重复创建框架类对象、视类对象和文档类对象。
---------------------------------------------------------------------------------
按下“打开”与“保存”按钮时,会执行CGraphicDoc::Serialize方法
在CGraphicDoc类中有个Serialize(CArchive& ar)方法,是文档类提供的用来保存数据和加载数据的函数,其参数就是一个CArchive对象。
注意:如果将一个文件保存之后,马上打开它,程序将不会调用本方法加载数据,
因为当我们保存数据的时候,以前创建的文档类对象与保存的数据关联在一起了,
再次打开刚保存的文件时,MFC框架内部识别出是同一份数据,因为与数据相关的文档类指针已经存在
所以程序不会调用Serialize(CArchive& ar)方法加载相同的数据。
相关文章推荐
- 孙鑫VC学习笔记:第十三讲 WM_FILE_NEW消息响应原理
- 孙鑫VC学习笔记:第十三讲 (一) 用CArchive类读取与保存文件
- 孙鑫VC学习笔记:第十三讲 用CArchive类读取与保存文件
- 孙鑫VC学习笔记:第十三讲 (五) 保存可串行化的类对象 如何获取文档与视类指针
- 孙鑫VC学习笔记:第一讲 Windows程序内部运行原理
- 孙鑫VC学习笔记:第十三讲 关于释放内存
- 孙鑫VC学习笔记:第十三讲 (二) 设置文档标题
- 孙鑫vc++学习(vs2008)笔记之第一课Windows程序运行原理
- 孙鑫VC学习笔记:第十三讲 生成可串行化的类
- 孙鑫VC学习笔记:第十三讲 保存可串行化的类对象 如何获取文档与视类指针
- VC入门学习---MFC传输自定义消息并响应自定义消息
- Akka学习笔记:Actor消息处理-请求和响应(2)
- 孙鑫VC学习笔记:第六讲 菜单
- 孙鑫vc学习笔记_第11课_part2
- JAVA学习笔记之二控件消息原理
- 孙鑫VC学习笔记:第十七讲 (一) 用剪贴板实现进程间的通信
- 孙鑫VC学习笔记:第十四讲 (二) 网络编程
- 孙鑫VC学习笔记:第十一讲 (五) 如何使窗口具有滚动条
- Akka学习笔记:Actor消息处理-请求和响应(1)
- 学习孙鑫VC++笔记