1.3.1 应用程序对象

MFC应用程序的核心就是基于CWinApp类的应用程序对象,CWinApp提供了消息循环来检索消息并将消息调度给应用程序的窗口。当包含头文件<afxwin.h>,可以将CWinApp以及其它MFC类引入程序。一个MFC应用程序有且只有一个应用程序对象,此对象必须声明为全局范围内有效,以便在程序的开始即被实例化。

应用程序类被命名为CMyApp,其实例化为:

 CMyApp myapp;

CMyApp

CMyApp继承CWinApp,且没有声明任何数据成员,只是覆盖了一个从CWinApp类中继承来的函数InitInstance,InitInstance在应用程序创建之后、窗口创建之前被调用。事实上,最小的MFC应用程序也必须从CWinApp派生出一个类并覆盖CWinApp::InitInstance创建一个窗口。

InitInstance

InitInstance为虚函数,默认操作仅包含一个返回值,其目的是为应用程序提供一个自身初始化的机会,InitInstance是执行程序每次开始时都需要进行初始化工作的最好地方。例如本例程的初始化如下:

 BOOL CMyApp::InitInstance()

 {
m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE;
}

CMyApp::InitInstance

构造一个CMainWindow(CFrameWndàCMainWindow)对象,并将其地址复制到应用程序对象的m_pMainWnd数据成员中。在窗口创建之后,InitInstance通过CMainWindow指针调用ShowWindow和UpdateWindow来显示该窗口。ShowWindow和UpdateWindow是所有窗口对象共用的CWnd的成员函数。

ShowWindow

 BOOL ShowWindow( int nCmdShow )

ShowWindow

如果窗口原来可见,则返回非零值;如果CWnd原来是隐藏的,则返回0。

根据Windows程序设计协议,应用程序将存储在应用程序对象的m_nCmdShow的变量传递给WinMain的nCmdShow参数,nCmdShow值通常为SW_SHOWNORMAL。

UpdateWindow

UpdateWindow立即重新绘制窗口来完成ShowWindow启动的作业,工作完成后,InitInstance返回TRUE以便应用程序继续运行。

其它CWinApp可覆盖函数

我们现在知道InitInstance是能够被覆盖的CWinApp成员函数之一,可以通过它来定义应用程序对象的操作,下面我们查看一下CWinApp有多少可以被覆盖的成员函数,如下图:

即使是被定义成可覆盖函数,但是诸如WinHelp和ProcessWndProException这样的函数。例如:我使用ExitInstance在应用程序终止后清屏,如果使用InitInstance分配了内存或其它资源,ExitInstance将是释放资源的绝佳的地方。ExitInstance默认操作是做一些框架结果要求的清除事务,如果覆盖了它就必须确保要调用基类版本。

MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(02)的更多相关文章

  1. MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(03)

    1.3.2 MFC如何使用应用程序对象 MFC程序没有main函数,没有WinMain函数,到底是什么启动了程序的运行? 一个MFC提供的源代码中(Winmain.cpp)包含了一个AfxWinMai ...

  2. 我的第一个MFC的ArcGIS Engine程序

    原文 http://blog.csdn.net/zzahkj/article/details/9003518 (第一版,以VC++6.0+AE9.3为例) 首次,学习MFC,写个笔记,MFC还是挺好学 ...

  3. MFC通过ODBC连接mysql(使用VS2012编写MFC)

    原创文章,转载请注明原文:MFC通过ODBC连接mysql(使用VS2012编写MFC) By Lucio.Yang 1.ODBC连接mysql 首先ODBC是什么呢? 开放数据库互连(Open Da ...

  4. visual2017专业版MFC编程环境搭建及第一个MFC程序的创建

    1.MFC介绍及环境搭建 MFC全程为Microsoft Foundation class Library,即微软的基本类库,MFC实际上是一个庞大的文件库,它由指向文件和源文件组成. 首先,打开vi ...

  5. MFC (如何通过点击botton打开一个文件夹/文件)

    1.建一个MFC的工程,类型为基于对话框.在工具箱里拖进去一个button按键,如下图. 2.双击button1按键就可以进入到点击button1后要执行操作的代码,编写如下代码实现网页/文件夹或者文 ...

  6. 第一个c程序和vs2017 在打开MFC rc文件时找不到rcdll.dl

    第一个c程序 #include<stdio.h> int main() { ; ; printf_s("请输入两个数字:"); scanf_s("%d,%d& ...

  7. 第一个MFC实例:计算圆周长和圆面积

    一.基于Microsoft MFC的编程方法 MFC是微软基础类库(Microsoft Foundation Class)的缩写.与API不同,MFC不是Windows操作系统的组成部分,而是微软公司 ...

  8. MFC小程序02————— 不规则窗体小应用程序

    什么不说了.先上程序截图: 执行结果是有一棵有星星在闪烁的圣诞树.还会循环播放背景音乐. 之前也是在网上看到类似的一个程序.然后自己近期也在学MFC.所以就模仿着写了一个, 当中使用的是GDI+来显示 ...

  9. fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC

    出现如下错误: fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires ...

随机推荐

  1. CocoaPods使用 主要带图。转载。

    原文地址 快速更新,不需要查找更新库 命令:pod update  --verbose --no-repo-update 虽然网上关于CocoaPods安装教程多不胜数,但是我在安装的过程中还是出现了 ...

  2. unreal slate 创建 window

    testWindow = SNew(SWindow) .Title(LOCTEXT("Asset Window", "Asset Window")) .Clie ...

  3. validate插件深入学习-02 常用方法和validate对象的方法

    ①检查表单元素是否有效 valid() 在表单内添加<button id="check">检查</button> $('#check').click(fun ...

  4. Css 备忘知识点

    1.Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,可通过加入 CSS 属性 -webkit-text-size-adjust: none; 2.HTML5的form如 ...

  5. Java四种线程池

    Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:20 ...

  6. webpack + react + es6, 并附上自己碰到的一些问题

    最近一直在学react,react的基础部分已经学得差不多了,然而自己并没有做详细的记录,有兴趣的同志可以参考阮一峰老师的教程,个人觉得挺不错的,链接如下:https://github.com/rua ...

  7. ROS学习笔记(七)——节点

    NEW 1 #打开新的终端,以后不再注释$ sudo apt-get install ros-<distro>-ros-tutorials #下载一个教学用的仿真器$ roscore #运 ...

  8. IP地址的组成

    IP地址的组成:是因特网上,为了每一台主机分配的,由32位二进制数组成的唯一标识符,包括网络地址和主机地址两部分,网络地址标识一个物理网络,主机地址标识这个网络下的一台主机,其表示形式如下  IP地址 ...

  9. [mysql] 记osx 10.10系统修改mysql root 密码

    http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html亲测方法3,已成功重置密码.(感谢@非常,告诉我官网就有重置方法,网上 ...

  10. 数据挖掘算法(一)C4.5

    统计了14天的气象数据D(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play).如果给出新一天的气象指标数据:sunny,cool,hig ...