按惯例,这一篇文章主要还是作者读《深入浅出MFC》整理的一些笔记。
MFC的程序流程顺序说明
MFC的类库你定义好之后,MFC本身的程序入口你是看不见的,MFC会自动地把你做好的主类(APP类)和一些资源类(CWnd类等窗口类)都加载进来,依据内置winmain函数逐步生成。这里简略记载一下实际的MFC程序运行流程:
1.Windows程序执行时,系统会为此开一个进程,并使用系统接口函数读取EXE文件内的程序入口,开始正式执行MFC内置的winmain程序。
2.winmain程序依次初始化MFC变量、app类变量、分布线程、初始化与实例化app类,让系统执行、让系统退出、结束这些工作。app类文档:https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cwinapp-class?view=msvc-160。
3.对实例化的主类winapp来说,实例化时会定义一系列app的初始参数,然后会执行CWinApp::InitInstance函数(这实际上是个虚函数,需要你具体的在其中写初始化的)。你在InitInstance主要要干的事情大概是创立、注册一个CWnd类的窗口作为你的主要窗口。
4.一个CWnd类的子类注册、创立过程为:首先对这一类进行声明,你需要在头文件以及cpp当中创立对应类型类的实际子类,同时将你CWinApp中的m_pMainWnd变量与CWnd挂钩。
5.m_pMainWnd与实际的CWnd挂钩之后,还需要写有关CWnd的回调函数,也就是根据消息映射地图message_map的不同种类的message写响应。(你可以简单的直接根据message就在InitInstance函数里写,也可以专门建立一个函数来操作)。