孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
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)方法加载相同的数据。 

孙鑫VC++深入详解:Lesson5 Part4 屏幕字符串滚动输出,DrawText,SetTimer,WM_Timer消息 滚动字母,修改输出字幕颜色,定时器 在onCreate中添加一个定时器,即SetTimer(1,100,NULL) 再在类CDrawView中添加消息WM_TIMER的响应函数OnTimer 每间隔100毫秒被调用OnTime() 在OnTime()中用DrawText输出字符串,DrawText的输出宽度每次按照5像素宽度增加, 随着矩形宽度增加,那么显示出来的字符串就逐步增加,效 阅读详情

相关推荐

孙鑫VC学习笔记第十三 WM_FILE_NEW消息响应原理

WM_FILE_NEW消息响应原理当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,它的响应函数应该叫OnFileNew(),但是在代码中找不到,通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument()WM_FILE_NEW消息是如何响应的呢?我们可以在VC++的安装目录下找到一个文件../Microsoft Visu

遐迩思的专栏 1808

MFC-文档视图

MDI程序       MiniDraw只有一个About对话框,这回要把它变成一个MDI程序,借助于文档视图的威力,并不需要花很大的力气。       MDI由4个类组成:主框架类,由CMDIFrameWnd派生而来,表示程序的MDI父窗口。子框架类,由CMDIChildWnd派生而来,表示程序的MDI子窗口。视图类,由CView派生而来,表示一个文档视图,内嵌于子窗口。

colin 8551

关于MFC中如何调用CWinApp::OnFileNew()和OnFileClose()

来源:http://blog.163.com/bbluesnow@126/blog/static/27784545201262802046540/ 今天在做项目的时候,需要点击一个按钮来创建新的View视图,即需要想办法调用CWinApp::OnFileNew()函数,无奈这个函数是protected类型的,没法显示调用。MFC消息机制没有学好,折腾了好久才解决。唉,又一次感到知识匮乏啊

gll028的专栏 3947

ID_FILE_NEW消息和ID_FILE_OPEN消息

转自http://kb.cnblogs.com/a/2357724/和http://blog.csdn.net/godknows007/article/details/6192925   有详细代码                   MFC默认会发送ID_FILE_NEW消息,调用CWinAppEx::OnFileNew(),在这个函数里会有m_pDocManager-> OnFileNew

chenlanjie842179335的专栏 7121

以前看书时记得一些笔记(二),很早了,现在再看都有些看不懂了

MFC学习: 1.CObject类为MFC总类,该类下面有一个重要的类CCmdTarget。而CCmdTarget类下面又有四个重要的继承类,分别为:CWinThread、CDocument、CDocTemplate、        CWnd类。所以,可以得出一个大概继承图,如图所示:                      CObject--->CCmdTarget ---->CW...

weixin_34185364的博客 233

孙鑫VC++深入详解:Lesson8 Part3---如何让对话框捕获WM_KEYDOWN消息?

因为对话框程序中,某些特点的消息,如按键消息被Windows内部的对话框过程处理了,即基类完成了或者被发送给子控件处理,所以在对话框类中就不能捕获到按键消息 解决办法:在子类中覆盖基类的特定消息过滤响应函数. 在MFC中,用虚函数ProcessMessageFilter()来过滤或者响应菜单和对话框的特定Windows消息. 在子类中覆盖它,接管消息响应. 本例中,在CWinSun

-----------------------------不要在跟自己无关的事情上浪费时间 3205

孙鑫VC学习笔记:第四 MFC消息映射机制和CDC类的使用

1.在文档-视图结构中,View类总是覆盖在CMainFrm框架窗口之上的.所以框架窗口无法对   WM_LBUTTONDOWN消息做出响应. 2.在添加WM_LBUTONDOWN后,查看我们的工程的源程序变化   查看 DrawView.h ------------------------------------------------------------------------

456

孙鑫VC学习笔记:第四 MFC消息映射机制和CDC类的使用 收藏

 1.在文档-视图结构中,View类总是覆盖在CMainFrm框架窗口之上的.所以框架窗口无法对  WM_LBUTTONDOWN消息做出响应.2.在添加WM_LBUTONDOWN后,查看我们的工程的源程序变化  查看 DrawView.h-------------------------------------------------------------------------------

vooohooodooo的专栏 506

孙鑫VC++深入详解:Lesson6 Part5--- 给自建的动态子菜单配置COMMAN消息响应函数

在MainFrm.cpp文件中的 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  中创建好子菜单: CMenu menu; menu.CreatePopupMenu(); //初始化对象menu --- 创建一个空的弹出菜单 GetMenu()->InsertMenu(2,MF_BYPOSITION|MF_POPUP,(U

-----------------------------不要在跟自己无关的事情上浪费时间 2487

孙鑫VC++座笔记-(4)MFC消息映射机制的剖析

孙鑫VC++座笔记-(4)MFC消息映射机制的剖析   一,消息映射机制 1,消息响应函数:(例:在CDrawView类响应鼠标左键按下消息)     1)在头文件(DrawView.h)中声明消息响应函数原型。         //{{AFX_MSG(CDrawView)   //注释宏         afx_msg void OnLButtonDown(UINT nFlag

无知人生,记录点滴 2640

MFC(菜单,孙鑫C++第六笔记整理)

1.当对某菜单添加消息响应函数时,4个类的消息响应优先次序分别是:a.View;b.CDOC;c.CMainFrame.d.CWinAPP.为什么?请参阅《深入浅出》   2.消息分类:a;标准消息(以WM_开头的消息,但不包括ON_COMMAND);b;命令消息 ON_COMMAND(IDM_PHONE1, OnPhone1),菜单和工具栏的消息。c.通告消息:按钮,列表框发出的消息

hellokazhang的博客 5556

孙鑫VC++视频学习笔记之5: VC菜单相关编程

<br />  阅读本文前,我们假设您已经:<br />   1,知道如何创建一个单文档的App Wizard<br />   2,知道C++ 类、函数重载等简单知识<br />   3,知道如何给View类或者Doc文档添加成员变量<br />   4,会用MFC的IDE调试工具最好,那么本文的程序您可以copy去调试<br />   5,知道如何为某个框架类添加虚函数或消息处理函数<br /><br />  一、 消息的分类:<br /><br />  消息的分类:标准消息,命令消息,通告消息。<br

Bilter的专栏 1670

孙鑫MFC消息映射机制的剖析

一,消息映射机制 1,消息响应函数:(例:在CDrawView类响应鼠标左键按下消息)  1)在头文件(DrawView.h)中声明消息响应函数原型。 //{{AFX_MSG(CDrawView)   //注释宏 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //}}AFX_MSG   //注释宏 说明: 在注释宏之

明月松间照,清泉石上流! 1035
上一篇: 孙鑫VC学习笔记:第十三讲 (二) 设置文档标题
下一篇: 孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
Savitch
博客等级 码龄15年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值