程序的执行与WinMain起点

       当Windows的Shell(资源管理器)侦测到使用者意欲执行一个Windows程序,就会调用加载器将程序加载,然后调用C startup code,后者再调用WinMain,开始执行程序。WinMain的四个参数由操作系统传递进来。

       即:

①    使用者双击exe,想要执行一个Windows程序

②    Windows资源管理器侦测到该行为,于是调用加载器,将程序加载进来

③    Windows资源管理器调用C startup code

④    C startup code调用WinMain,开始执行程序

 

在MFC中,使用一个全局函数AfxWinMain来代替原来的WinMain。

整个调用过程如下: 

全局对象theApp通过构造函数初始化

//在程序执行时,就会创建全局对象theApp。theApp创建操作是先于该AfxWinMain函数进行的。theApp的创建会使用构造函数中的默认参数
int AFXAPIAfxWinMain(……)
{
	CWinApp* pApp = AfxGetApp();//获取全局对象theApp 

	AfxWinInit(……); //初始化操作。对theApp的各个成员变量进行设置,并在函数的末尾调用AfxInitThread,将消息队列加大到96

	pApp->InitApplication();//内部管理操作,不会改写

	pApp->InitInstance();//窗口创建以及其他初始化操作函数。这是CWinApp的虚函数,本身为空,必须改写它。MFC会生成一个默认的改写函数。	//该函数第一步会new一个CMyFrameWnd对象,执行CMyFrameWnd的默认构造函数,而CMyFrameWnd构造函数中有一个Create函数,于是Create函数被调用来创建窗口。但调用Create函数时,Create函数内部会调用CreateEx,而CreateEx会先调用AfxRegisterClass注册窗口,注册完成后调用PreCreateWindow(cs),然后再调用CreateWindowEx来创建窗口。
	//当窗口被创建后,该函数开始执行后续步骤,就是用户自定义的一些操作。

	nReturnCode = pApp->Run();//程序运行函数,用于激活消息循环。该函数内部有一个While循环。程序的整个运行期间都是处于该While循环的。该While循环即消息循环,不停地进行GetMessage与TranslateMessage、DispatchMessage操作,将消息推往AfxWndProc

	AfxWinTerm();//程序结束。执行某些结束操作
}
      其中涉及到的最重要的函数就是pApp->InitInstance();

       针对单文档、多文档以及对话框,pApp->InitInstance();的内容也不同。

       在MFC中,AfxWinMain函数被封装在appModul.cpp文件中,而不是在默认生成的工程文件中。所以从默认生成的文件中是找不到该函数的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值