WEB开发网
开发学院软件开发VC MFC程序中的WinMain函数(2) 阅读

MFC程序中的WinMain函数(2)

 2008-11-24 19:59:38 来源:WEB开发网   
核心提示:接下来,把全局变量a换成一个全局对象,MFC程序中的WinMain函数(2),看看结果如何,修改如例3-3所示的代码,每一个MFC程序实例有且仅有一个该派生类的实例化对象,也就是theApp全局对象,新定义一个CPoint类,并定义该类的一个全局变量pt

接下来,把全局变量a换成一个全局对象,看看结果如何。修改如例3-3所示的代码,新定义一个CPoint类,并定义该类的一个全局变量pt,结果如例3-4所示。

例3-4

  1.#include <iostream.h>
  2.//int a=6; 
  3.class CPoint
  4.{
  5.public:
  6.CPoint()
  7.{
  8.}
  9.}; 
  10.CPoint pt;
  11.void main()
  12.{
  13.// cout<<a<<endl;
  14.}

设置三个断点:CPoint构造函数处(第6行代码处)、pt全局对象定义处(第10行代码处)和main函数定义处(第12行代码处)。选择调试运行main函数,将会看到程序代码执行的先后顺序。这时我们将发现main程序首先到达pt全局对象定义处(第10行代码处);继续运行程序,程序到达CPoint类的构造函数(第6行代码处);再继续运行程序,程序到达main函数处(第12行代码处)。由此可见,无论全局变量,还是全局对象,程序在运行时,在加载main函数之前,就已经为全局变量或全局对象分配了内存空间。对一个全局对象来说,此时就会调用该对象的构造函数,构造该对象,并进行初始化操作。

至此,读者应该明白了先前创建的Test程序的运行顺序,也就是为什么全局变量theApp的构造函数会在WinMain函数之前执行了。那么,为什么要定义一个全局对象theApp,让它在WinMain函数之前执行呢?该对象的作用是什么呢?

先关闭main工程,返回Test程序,并使其处于编辑状态。在前面介绍Win32 SDK应用程序时,曾经讲过应用程序的实例是由实例句柄(WinMain函数的参数hInstance)来标识的。而对MFC程序来说,通过产生一个应用程序类的对象来惟一标识应用程序的实例。每一个MFC程序有且仅有一个从应用程序类(CWinApp)派生的类。每一个MFC程序实例有且仅有一个该派生类的实例化对象,也就是theApp全局对象。该对象就表示了应用程序本身。

1 2 3 4 5 6  下一页

Tags:MFC 程序 WinMain

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接