MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(02)
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)的更多相关文章
- MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(03)
1.3.2 MFC如何使用应用程序对象 MFC程序没有main函数,没有WinMain函数,到底是什么启动了程序的运行? 一个MFC提供的源代码中(Winmain.cpp)包含了一个AfxWinMai ...
- 我的第一个MFC的ArcGIS Engine程序
原文 http://blog.csdn.net/zzahkj/article/details/9003518 (第一版,以VC++6.0+AE9.3为例) 首次,学习MFC,写个笔记,MFC还是挺好学 ...
- MFC通过ODBC连接mysql(使用VS2012编写MFC)
原创文章,转载请注明原文:MFC通过ODBC连接mysql(使用VS2012编写MFC) By Lucio.Yang 1.ODBC连接mysql 首先ODBC是什么呢? 开放数据库互连(Open Da ...
- visual2017专业版MFC编程环境搭建及第一个MFC程序的创建
1.MFC介绍及环境搭建 MFC全程为Microsoft Foundation class Library,即微软的基本类库,MFC实际上是一个庞大的文件库,它由指向文件和源文件组成. 首先,打开vi ...
- MFC (如何通过点击botton打开一个文件夹/文件)
1.建一个MFC的工程,类型为基于对话框.在工具箱里拖进去一个button按键,如下图. 2.双击button1按键就可以进入到点击button1后要执行操作的代码,编写如下代码实现网页/文件夹或者文 ...
- 第一个c程序和vs2017 在打开MFC rc文件时找不到rcdll.dl
第一个c程序 #include<stdio.h> int main() { ; ; printf_s("请输入两个数字:"); scanf_s("%d,%d& ...
- 第一个MFC实例:计算圆周长和圆面积
一.基于Microsoft MFC的编程方法 MFC是微软基础类库(Microsoft Foundation Class)的缩写.与API不同,MFC不是Windows操作系统的组成部分,而是微软公司 ...
- MFC小程序02————— 不规则窗体小应用程序
什么不说了.先上程序截图: 执行结果是有一棵有星星在闪烁的圣诞树.还会循环播放背景音乐. 之前也是在网上看到类似的一个程序.然后自己近期也在学MFC.所以就模仿着写了一个, 当中使用的是GDI+来显示 ...
- 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 ...
随机推荐
- 【解决方法】magento paypal快速结账 不跳转
magento paypal Express Checkout(快速结账) 页面不跳转到Paypal的解放方法 我使用的magento 1.9.0.1 版本的,Paypal 快速结账都已经设置完毕,但 ...
- 如何正确使用$_SERVER['DOCUMENT_ROOT']识别该路径的文件
echo $_SERVER['DOCUMENT_ROOT']; 这时输出当前文件所在的路径 D:/phpStudy/WWW/study/php&mysql $_SERVER['DOCUMENT ...
- K-means算法
K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢? ...
- Pod(转)
一.CocoaPods的安装 (1)使用淘宝的Ruby镜像替换官方的ruby源,在终端输入命令 $ gem sources --remove https://rubygems.org/ $ gem s ...
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
对这几个概念模模糊糊,看到一篇文章就记录下来. 当你发布一个应用之后,(取决于具体的发布时间)可能没过几个月 Android 系统就发布了一个新版本.这对你的应用意味着什么,所有东西都不能用了?别担心 ...
- centos各版本信息
CentOS version Architectures RHEL base Kernel CentOS release date RHEL release date Delay (days) 2.1 ...
- swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念
***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...
- AngularJS的$watch用法
$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...
- final发布评语
final发布评语: 1.约跑(nice!)发布者:组长李权以及组员刘芳芳和于淼,对于约跑APP,final发布主要完成对于用户提出的(1.对话字数多导致头像被挤掉2.返回时没有完全退出)问题修改成功 ...
- 03-方法ppt动手动脑问题及课后实验性问题总结
一.如何不使用static来进行调用函数? 1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了.如果想用又不加可以吧自己写的方法 ...