MFC程序的执行过程

本文详细解析了MFC程序的执行过程,从全局对象theApp的产生开始,经过afxWinMain函数,到AfxWinInit初始化,直至窗口创建与显示。深入探讨了CwinApp、C**WinApp及C**FrameWnd等关键类的作用与调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MFC程序的执行过程

1 首先产生全局的对象theApp(任何一个mfc程序都会产生这样一个对象)

2 进入到 int AFXAPI afxWinMain(…)这个函数中。

3 进入到 AfxWinInit(…)。

SDK程序WinMain函数的四个参数HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpCmdLine在CwinApp中都是成员变量,在这一步,将afxWinMain传进来的这些参数值赋给theApp对应的成员变量。

4 pApp->InitApplication() 调用的是CwinApp:: InitApplication()。该函数在C**WinApp中并未被改写。

5 pApp->InitInstance()。调用的是C**WinApp:: InitInstance()。该函数被改写了。

6 第5步中new C**FrameWnd,引发C**FrameWnd的构造函数。

7 执行C**FrameWnd的构造函数中的Create函数。调用的是CFrameWnd::Create函数。

8 CWnd::CreateEx() 。该函数中定义了cs结构(cs可以在下一步中修改)。产生窗口,得到窗口句柄hWnd。

9 CFrameWnd::PreCreateWindow (CREATESTRUCT & cs)。不同类的PreCreateWindow成员函数都是在窗口产生之前一刻被调用,准备用来注册窗口类。可以这样理解,在mfc为我们注册窗口类之前,预留了这个接口,我们只要在PreCreateWindow修改cs中的数据,就可以产生我们期望的窗口属性。

10 注册该窗口.

11 回到第5步中,显示窗口。

12 pApp->Run 调用CwinApp::Run。CwinApp::Run中又调用了CwinTheard::Run()。该函数维护消息队列中的消息循环,发送消息到AfxWndProc。下面就是Message Map的事了…

转载于:https://www.cnblogs.com/Wilson-Kwok/archive/2012/11/21/2780955.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值