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

MFC程序中的WinMain函数(2)

 2008-11-24 19:59:38 来源:WEB开发网   
核心提示: 上述CWinApp的构造函数中有这样一句代码:pModuleState->m_pCurrentWinApp = this;根据C++继承性原理,这个this对象代表的是子类CTestApp的对象,MFC程序中的WinMain函数(2)(3),即theApp,同时,在MFC中,以Afx

上述CWinApp的构造函数中有这样一句代码:

pModuleState->m_pCurrentWinApp = this;

根据C++继承性原理,这个this对象代表的是子类CTestApp的对象,即theApp。同时,可以发现CWinApp的构造函数有一个LPCTSTR类型的形参:lpszAppName。但是我们程序中CTestApp的构造函数是没有参数的。在第2章介绍C++编程知识时,曾经介绍,如果基类的构造函数带有一个形参,那么子类构造函数需要显式地调用基类带参数的构造函数。那么,为什么我们程序中的CTestApp构造函数没有这么做呢?

我们知道,如果某个函数的参数有默认值,那么在调用该函数时可以传递该参数的值,也可以不传递,直接使用默认值即可。我们可以在例3-5所示代码中的CWinApp类名上单击鼠标右键,利用【Go to Definition of CWinApp】命令,定位到CWinApp类的定义处,代码如例3-6所示。

例3-6

  class CWinApp : public CWinThread
  {
    DECLARE_DYNAMIC(CWinApp)
  public:
  // Constructor
    CWinApp(LPCTSTR lpszAppName = NULL);   // app name defaults to EXE name
  ……

从例3-6所示代码中,可以看到CWinApp构造函数的形参确实有一个默认值(NULL)。这样,在调用CWinApp类的构造函数时,就不用显式地去传递这个参数的值。

2.AfxWinMain函数

当程序调用了CWinApp类的构造函数,并执行了CTestApp类的构造函数,且产生了theApp对象之后,接下来就进入WinMain函数。根据前面例3-1所示代码,可以发现WinMain函数实际上是通过调用AfxWinMain函数来完成它的功能的。

知识点 Afx前缀的函数代表应用程序框架(Application Framework)函数。应用程序框架实际上是一套辅助我们生成应用程序的框架模型。该模型把多个类进行了一个有机的集成,可以根据该模型提供的方案来设计我们自己的应用程序。在MFC中,以Afx为前缀的函数都是全局函数,可以在程序的任何地方调用它们。

上一页  1 2 3 4 5 6  下一页

Tags:MFC 程序 WinMain

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