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. Node 编程规范

    空格, 2个, 因为有多层函数嵌套 行宽, 80个字符 语句分隔, 一律用; 并且占一行 变量定义, 每一个都要用 var, 并且不要定义全局变量 变量名和属性名, 小驼峰, yourName 函数, ...

  2. Java输入输出流进阶

    输入输出的内容是文本内容,考虑使用字符流. 输入输出的内容是二进制内容,考虑使用字节流. 凡是能用记事本打开并查看的内容称为文本文件,反之则为二进制文件. package ch15; import j ...

  3. c++程序判断系统是Linux还是Windows

    用C++来实现,本来想了很多,后来越写越烂,而且结果总是不尽人意,干脆这样子好了: int main() { int judge = system("cls"); ) cout & ...

  4. 深入理解js构造函数

    JavaScript对象的创建方式 在JavaScript中,创建对象的方式包括两种:对象字面量和使用new表达式.对象字面量是一种灵活方便的书写方式,例如: ? 1 2 3 4 5 6 var o1 ...

  5. 安卓跳转到GPS设置界面

      /** * 监听GPS */ private void initGPS() { LocationManager locationManager = (LocationManager) this . ...

  6. ubuntu14.04利用aliyun安装docker

    docker官网上的安装步骤比较麻烦,而且下载下来后pull镜像也特别慢.通过阿里云可以快速安装docker,并且可配置加速器.通过阿里云超快速安装docker: 安装或升级Docker 请安装1.6 ...

  7. phalcon: 当删除循环删除一组数据,需要判断影响的行affectedRows

    phalcon:有一个表,按日期查找半年以为的数据,由于数据量特别大,不能一次:delete删除数据,否则会造成数据表卡顿,数据库锁死. 那么只能循环的删除数据,每次删除100条左右,知道删除为止., ...

  8. malloc error:初始值设定元素不是常量

    #include <stdio.h> #include <stdlib.h> char *buf = (char *)malloc(BUFSIZ); setbuf(stdout ...

  9. DataSet客户端分页实现

    window.$ClientPageHelper=function(fromDs,toDs){ var pageSize=toDs.get('pageSize'); var elist=fromDs. ...

  10. Rigidbody相关的操作最好放在FixedUpdate中,update中可能会无效果

    void Turning() { // Create a ray from the mouse cursor on screen in the direction of the camera. Ray ...