(此可作为我作读书笔记的范本!!!~)
第三章 MFC框架程序剖析
MFC(Microsoft Foundation Class,微软基础类库)
3.1 MFC AppWizard
无
3.2 基于MFC的程序框架剖析
1. 在MFC中,类的名称以“C”开头。
2. CWnd是MFC中最基本的基类。
3.2.1 MFC程序中的WinMain函数
1. theApp全局对象
(1)无论全部变量还是全部对象,程序运行时,在加载main函数之前,就已经为这些变量和对象分配
了空间。
(2)Win32SDK应用程序的实例是由实例句柄hInstance来标识的。
(3)MFC程序实例有且仅有一个实例化对象,也就是theApp全局对象,它表示了应用程序本身。
2. AfxWinMain函数
(1)当theApp对象产生之后,就进入WinMain函数。WinMain函数是通过调用AfxWinMain函数来实现它的
功能的。
(2)Afx前缀的函数代表应用程序框架函数,是全局函数,可以在程序的任何地方调用它们。应用程序
框架负责把多个类进行有机的集成。
(3)指针pThread和pApp所指向的都是theApp全局对象。
3. InitInstance函数
pApp初始化时:
首先调用InitApplication函数,以完成MFC内部管理方面的工作。
然后调用InitInstance函数,该函数是一个虚函数,可以被重载。一般用来初始化全局变量。
3.2.2 MFC框架窗口
1. 注册窗口
注册窗口工作是在WinMain函数之后,窗口产生之前进行的。
2. 创建窗口
创建窗口之前会运行基类的PreCreateWindow函数。CMainFrame里的PreCreateWindow函数虽然是子
函数,但其参数是引用类型,所以在这里修改窗口外观是可行的。
3. 显示窗口和更新窗口
m_pMainWnd是CMainFrame对象的指针,可以用来设置窗口的形态。
m_pMainWnd->ShowWindow(SW_SHOW); 显示窗口
m_pMainWnd->UpdateWindow(); 更新窗口
3.2.3 消息循环
1. 注册窗口类、创建窗口、显示和更新窗口的工作完成后,就进入消息循环。
CWinThread类的Run函数就是完成消息循环这一任务的。
该函数在AfxWinMain函数中调用。
3.2.4 窗口过程函数
消息路由默认是交给DefWindowProc函数处理的,但实际上是采用消息映射机制来处理各种消息。
综上所述,MFC程序的运行过程按如下步骤进行:
1. 利用全局对象theApp启动程序
2. 调用theApp的构造函数,分配内存
3. 进入WinMain函数,完成程序应用上的初始化,包括注册创建显示和更新窗口
4. 进入消息循环
3.2.5 文档/视类结构
数据的储存和加载由文档类来完成,数据的显示和修改则由视类完成。
3.2.6 帮助对话框类
提供版本号信息。
3.3 窗口类、窗口类对象与窗口
3.3.1 三者之间关系
窗口销毁,窗口类对象不销毁;
窗口类对象销毁,窗口也销毁。
3.3.2 在窗口中显示按钮
按钮也是一个窗口,它的基类是CWnd。要将它显示出来,需要达到两个条件。
1. 定义为CMainFrame类的成员。
2. m_btn.Creat后,调用m_btn.ShowWindow(SW_SHOWNORMAL)