第三章、MFC框架程序剖析

3.1MFCAppWizard

建立一个MFC AppWizard程序:
选择工程MFC AppWizard(exe),然后选择Single document。其他的选择默认选项,最后结束,运行。

3.2基于MFC的程序框架剖析

工作区窗格中ClassView中显示了5个类:
CAboutDlg CMainFram CTestDoc CTestApp CTestView
关于对话框类 主框架类 工程文本类 工程应用程序类 工程视图类

MFC中类名以字母C开头,然后加上工程名,再加上后缀。
它们CAboutDlg,CMainFram,CTestView分别派生于:CDialog,CFrameWnd,CView,而这三个派生于CWnd类

3.2.1MFC程序中的WinMain函数

WinMain函数所在路径:
D:\Microsoft Visual Studio\VC98\MFC\SRC的APPMODUL.CPP文件中。

MFC程序中的类如何与WinMain函数关联一起呢?
双击CTestApp中的构造函数InitInstance(),跳到该类的源文件Test.cpp。CTestApp theApp;其中定义了一个变量,下一个断点。
程序执行的顺序:theApp全局对象定义处->TestApp构造函数->WinMain函数

为什么要定义一个theApp全局对象,让他在CwinApp的构造函数之前执行呢?
theApp构造函数调用之前会调用父类CwinApp的构造函数,从而把自己创造的类与Microsoft提供的基类关联起来,CwinApp的构造函数完成程序运行时的一些初始化工作。

AfxWinMain函数:CwinApp的函数实际上是通过调用AfxWinMain函数来完成它的功能的。D:\Microsoft Visual Studio\VC98\MFC\SRC的WINMAIN.CPP中。AfxWinMain函数首先调用AfxGetThread获得一个CWinThread类型的指针,接着调用AfxGetApp函数获得一个CWinApp类型的指针。这两个指针pThread和pApp都是指向theApp全局对象

pThread和pApp调用三个函数,完成了设计、注册、创建、显示、更新窗口,消息循环以及窗口过程函数。

3.2.2MFC框架窗口

设计和注册窗口类:
窗口类的注册:是由AfxEndDeferRegisterClass函数完成的,该函数的定义位于WINCORE.CPP中。
MFC程序执行的脉络也是在WinMain函数之后,窗口产生之前注册窗口类的。

创建窗口:是由CWnd类的CreatEx函数来实现的,该函数声明位于AFXWin.h文件中。

显示窗口和更新窗口:在CTestApp类InitInstance函数内部实现的。

3.2.3消息循环

CWinThread类的RUN函数完成消息循环的,该函数在AfxWinMain函数中调用的。CWinThread类的RUN函数的定义位于THRDCORE.CPP中。

.2.4窗口过程函数

在AfxEndDeferRegisterClass函数中,将默认的窗口过程:DefWindowProc,设置为窗口过程函数。

3.2.5文档/视类结构

CTestDoc是一个文档类,CView是一个视图类。数据的存储和加载由文档类来完成,数据的显示和修改由视类来完成。在CTestApp类InitInstance函数内部把框架类、视图类和文档类有机结合起来。

3.2.6帮助对话框类

CAboutDlg类,是一个对话框类,派生于窗口类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

身影王座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值