八宝书库 > 文学其他电子书 > 深入浅出MFC第2版(PDF格式) >

第32部分

深入浅出MFC第2版(PDF格式)-第32部分

小说: 深入浅出MFC第2版(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                  #0008  void main() 

                  #0009  { 

                  #0010 

                  #0011    CWinApp* pApp = AfxGetApp(); 

                  #0012 

                  #0013  } 



                   Frame1  的命令列编译联结动作是(环境变量必须先设定好,请参考第4章的「安装与设 



                   定」一节): 



                      cl my。cpp mfc。cpp   



                    Frame1  的执行结果是: 



                      CObject Constructor 

                      CCmdTarget Constructor 

                      CWinThread Constructor 

                      CWinApp Constructor 

                      CMyWinApp Constructor 



                      CMyWinApp Destructor 

                      CWinApp Destructor 

                      CWinThread Destructor 

                      CCmdTarget Destructor 

                      CObject Destructor 



                    好,你看到了,Frame1 并没有new 任何对象,反倒是有一个全域对象theApp 存在。 



                    C++ 规定,全域对象的构造将比程序进入点(在DOS 环境为main ,在Windows 环境为 



                    WinMain)更早。所以theApp 的构造式将更早于main 。换句话说你所看到的执行结果 



                    中的那些构造式输出动作全都是在main  函数之前完成的。 



114 


…………………………………………………………Page 177……………………………………………………………

                                         第3章    MFC 六大關鍵技術之模擬 



    main  函数调用全域函数AfxGetApp  以取得theApp 的对象指针。这完全是仿真MFC 程序 



    的手法。 



MFC 程序的初始化过程 



    MFC 程序也是个Windows 程序,它的内部一定也像第1章所述一样,有窗口注册动 



    作,有窗口产生动作,有消息循环动作,也有窗口函数。此刻我并不打算做出Windows 程 



    序,只是想交待给你一个程序流程,这个流程正是任何MFC 程序的初始化过程的简化。 



    以下是Frame2 范例程序的类别阶层及其成员。对于那些「除了构造式与析构式之外没 



    有其它成员」的类别,我就不在图中展开他们了: 



      (本图从Visual C++  的「Class View 窗口」中获得) 



     就如我曾在第1章解释过的,InitApplication 和InitInstance 现在成了MFC  的CWinApp 



     的两个虚拟函数。前者负责「每一个程序只做一次」的动作,后者负责「每一个执行个 



                                                                 115 


…………………………………………………………Page 178……………………………………………………………

                   第篇  勿在浮砂築高台 



                    体都得做一次」的动作。通常,系统会(并且有能力)为你注册一些标准的窗口类别(当 



                    然也就准备好了一些标准的窗口函数),你(应用程序设计者)应该在你的CMyWinApp 



                    中改写InitInstance ,并在其中把窗口产生出来…这样你才有机会在标准的窗口类别中 



                    指定自己的窗口标题和菜单。下面就是我们新的main  函数: 



                       // MY。CPP 



                       CMyWinApp theApp; 



                       void main() 



                        { 



                          CWinApp* pApp = AfxGetApp(); 

                         pApp…》InitApplication(); 

                          

                         pApp…》InitInstance (); 



                         pApp…》Run(); 



                        } 



                   其中pApp  指向theApp 全域对象。在这里我们开始看到了虚拟函数的妙用(还不熟练者 



                   请快复习第2章): 



                   pApp…》InitApplication() 调用的是CWinApp::InitApplication , 

                       



                   pApp…》InitInstance() 调用的是CMyWinApp::InitInstance        (因为CMyWinApp 改 

                       



                     写它了), 



                      pApp…》Run() 调用的是CWinApp::Run , 

                    



                  好,请注意以下CMyWinApp::InitInstance  的动作,以及它所引发的行为: 



                    BOOL CMyWinApp::InitInstance() 



                    { 



                        cout 

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的