里面有些类名称等承接 :mfc入门基础(一),以下内容改编至以下博客
参考博客:VS2010/MFC编程入门之四(MFC应用程序框架分析)-软件开发-鸡啄米
VS2010/MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米
一、mfc主框架流程:
先进行一些初始化过程,再注册并创建窗口,然后显示、更新窗口,最后进入消息循环,消息都由窗口过程函数处理。
首先在test01.cpp中定义全局对象theApp:Ctest01App theApp;。调用CWinApp和Ctest01App的构造函数后,再进入Ctest01App::InitInstance()中。
需要重点关注的几个类
Ctest01App、CMainFrame、Ctest01Doc、Ctest01View
至于其他的类比如CClassView、CFileView等都是在框架窗口(CMainFrame)上创建的面板等,不是必要的。
关于四个主要类的关系进行剖析下,Ctest01App类处理消息,将收到的消息分发给相应的对象。CMainFrame是视图Ctest01View的父窗口,视图Ctest01View就显示在CMainFrame的客户区中。视图类Ctest01View用来显示文档类Ctest01Doc中的数据,并根据对视图类的操作修改文档类的数据。
二、消息机制
1、mfc使用的消息机制:
MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。
Windows消息分类
先讲下Windows消息的分类。Windows消息分为系统消息和用户自定义消息。Windows系统消息有三种:
1.标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。
2.命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。
3.通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。
CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。
用户自定义消息是实际上就是用户定义一个宏作为消息,此宏的值应该大于等于WM_USER,然后此宏就可以跟系统消息一样使用,窗口类中可以定义它的处理函数。
如何新添加消息处理函数:
1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。
2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。
3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
......
}
通过以上三个步骤以后,WM_CREATE等消息就可以在窗口类中被消息处理函数处理了。
用户自定义消息:
1、首先需要定义消息宏
#define WM_UPDATE_WND (WM_USER+1)
2、再到消息映射表中添加消息映射入口项
ON_MESSAGE(WM_UPDATE_WND, &CMainFrame::OnUpdateWnd)
3、MainFrm.h中添加消息处理函数的函数声明:
afx_msg LRESULT OnUpdateWnd(WPARAM wParam, LPARAM lParam);
4、最后就是在MainFrm.cpp中进行实现
吐槽一下,MFC中类名与文件名不一致,新看的人真不舒服呀。。。