孙鑫VC学习笔记:第十三讲 WM_FILE_NEW消息响应原理
2006-08-16 21:57
561 查看
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)方法加载相同的数据。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/teshorse/%E5%8D%81%E4%B8%89%E3%80%81WM_FILE_NEW%E6%B6%88%E6%81%AF%E5%93%8D%E5%BA%94%E5%8E%9F%E7%90%86.jpg)
当点击“新建”按钮时,会发送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)方法加载相同的数据。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/teshorse/%E5%8D%81%E4%B8%89%E3%80%81WM_FILE_NEW%E6%B6%88%E6%81%AF%E5%93%8D%E5%BA%94%E5%8E%9F%E7%90%86.jpg)
![](http://p.blog.csdn.net/images/p_blog_csdn_net/teshorse/%E5%8D%81%E4%B8%89%E3%80%81Document%20View%20%E6%96%87%E6%A1%A3%E8%A7%86%E7%B1%BB%E7%BB%93%E6%9E%84.jpg)
相关文章推荐
- 孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理
- 孙鑫VC学习笔记:第十三讲 (六) 关于释放内存
- DXUT 学习笔记(3)对键盘鼠标的响应 及 消息处理
- Android(java)学习笔记202:Handler消息机制的原理和实现
- Akka学习笔记:Actor消息处理-请求和响应(2)
- MFC学习笔记之:VC6.0中通过向导添加的消息响应系统自动添加的代码及删除方式
- ucos-ii学习笔记——消息邮箱的原理及使用
- 孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
- Caliburn.Micro for wp7 学习笔记(3) : 响应 Butto事件原理
- ucos-ii学习笔记——消息队列的原理及使用
- JAVA学习笔记之二控件消息原理
- JAVA学习笔记之二控件消息原理之源代码
- ucos-ii学习笔记——消息队列的原理及使用
- 孙鑫VC学习笔记:第一讲 Windows程序内部运行原理
- 孙鑫VC视频学习笔记之windows程序内部运行原理
- Akka学习笔记:Actor消息处理-请求和响应(1)
- 孙鑫VC学习笔记:第十三讲 设置文档标题
- 学习 Message(3): 响应 WM_LBUTTONDOWN 消息
- Windows Mobile学习笔记_关于csliderbar和wm_hscroll消息处理
- 学习笔记5:《大型网站技术架构 核心原理与案例分析》之 瞬时响应:网站的高性能架构