设为首页 加入收藏

TOP

11.3.2 MFC程序的组织方式(2)
2013-10-07 16:11:37 来源: 作者: 【 】 浏览:80
Tags:11.3.2 MFC 程序 组织 方式

11.3.2  MFC程序的组织方式(2)

3. 完成程序

为应用程序定义过窗口类之后,就可以编写COurApp类中的InitInstance()函数:
 

  1. BOOL COurApp::InitInstance(void)  
  2. {  
  3. m_pMainWnd = new COurWnd;                                                       // Construct a window object...  
  4. m_pMainWnd->ShowWindow(m_nCmdShow);                 // ...and display it  
  5. return TRUE;  
  6. }  

如前所述,该函数重写了基类CWinApp中定义的虚函数,虚函数由MFC库自动提供的WinMain()函数调用。InitInstance()函数通过使用new操作符在空闲存储器中为应用程序构造了一个主窗口对象。将返回的地址存入m_pMainWnd变量中,该变量是COurApp类中从基类继承的成员。这么做的结果是使该窗口对象附属于应用程序对象。我们甚至不需要考虑为创建的对象释放内存的问题-- 任何必要的清理工作都由MFC提供的WinMain()函数负责。

对于虽然相当有限、但也是完整的程序而言,还需要定义应用程序对象。在执行WinMain()之前,应用程序类COurApp的某个实例必须存在,因此必须使用下面这条语句在全局作用域声明该实例:
 

  1. COurApp AnApplication;                                      // Define an application object 

该对象之所以需要存在于全局作用域,是因为它是应用程序,而应用程序需要在开始执行之前存在。MFC提供的WinMain()函数要调用应用程序对象的InitInstance()函数成员来构造窗口对象,这表示应用程序对象是存在的。

4. 最终产品

既然我们已经看过所有代码,现在就可以在该项目的Ex11_02.cpp源文件中添加它们。在Windows程序中,类通常是在.h文件中定义的,而不在类内部定义的成员函数是在.cpp文件中定义的。但我们的应用程序是如此之短,因此最好把所有代码都放入一个.cpp文件中。这么做的优点是可以同时查看全部代码。该程序的代码如下所示:
 

  1. // Ex11_02.cpp An elementary MFC program  
  2. #include <afxwin.h>                                                                             // For the class library  
  3. // Application class definition  
  4. class COurApp:public CWinApp  
  5. {  
  6. public:  
  7. virtual BOOL InitInstance() override;  
  8. };  
  9. // Window class definition  
  10. class COurWnd:public CFrameWnd  
  11. {  
  12. public:  
  13. // Constructor  
  14. COurWnd()  
  15. {  
  16. Create(NULL, _T("Our Dumb MFC Application"));  
  17. }  
  18. };  
  19. // Function to create an instance of the main application window  
  20. BOOL COurApp::InitInstance(void)  
  21. {  
  22. m_pMainWnd = new COurWnd;                                                   // Construct a window object...  
  23. m_pMainWnd->ShowWindow(m_nCmdShow);                 // ...and display it  
  24. return TRUE;  
  25. }  
  26. // Application object definition at global scope  
  27. COurApp AnApplication;                                                                          // Define an application object  

这就是我们需要执行的全部操作。该程序看起来有点儿奇特,因为没有WinMain()函数;但正如上面提到的那样,事实上有一个由MFC库提供的WinMain()函数。

示例说明

我们现在即将大功告成,接下来构建并运行该应用程序。选择Build | Build Ex11_02.exe菜单项,单击适当的工具栏按钮,或者仅仅按下Ctrl+Shift+B组合键,都可以编译该解决方案。最后应该进行完全的编译和链接,这样就可以按下Ctrl+F5组合键运行该程序。这个最简单的MFC程序如图11-5所示。

可以拖动边框调整该窗口的大小,可以四处移动整个窗口,或者以通常的方式将其最小化或最大化。该程序支持的其他功能只有"关闭";可以使用系统菜单,使用窗口右上角的关闭按钮,或者只是按下Alt+F4组合键来关闭程序。该程序看起来好像没有多少东西,但考虑到只有很少的几行代码,它还是给我们留下了十分深刻的印象。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.3.2 MFC程序的组织方式(1) 下一篇11.5 本章主要内容

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)