InitInstance函数
BOOL InitInstance()为什么说它是程序的进入点?还有,那个WinMain函数又有什么作用,这两个函数之间有什么关系吗?
BOOL InitInstance()是MFC的CWinApp类的成员函数,而WinMain才是真正的入口点,但是MFC不允许程序中有WinMain这个函数,因为MFC自己编写了WinMain函数,如果程序中再定义就重复定义了,而MFC编写的的WinMain函数则调用了CWinApp::InitInstance函数,所以InitInstance看起来似乎就是MFC程序的入口点。
InitInstance是虚函数,继承类必须提供它的实现代码。完成整个消息链的启动。
在CWinApp这个类中除了有一般类都有的构造函数,一个重要的成员函数就是InitInstance,我们知道,在WINDOWS环境下面可以运行同一程序的多个实例,函数InitInstance的作用就是在生成的一个新的实例的时候,完成一些初始化的工作。
Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的初始化可以被分为两个部分:一次性的应用程序初始化工作,这些在应用程序第一次运行时完成,以及实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时。框架中WinMain实现调用这个函数。重载InitInstance以初始化在Windows下运行的应用程序的每个新实例。
通常,重载InitInstance以构造主窗口对象并设置CWinThread::m_pMainWnd数据成员,使其指向这个窗口。
InitApplication和InitInstance现在成为MFC的CWinApp的两个虚函数,前者负责“每一个程序只做一次”的操作,后者负责“每一个例程都得做一次”的操作。 “每一个程序”指的是进程的概念。“每一个例程”指的是线程的概念。所以InitApplication负责“每一个程序只做一次”的操作。而InitInstance是每一个线程都具有的函数,只不过很多情况下,你自己开的线程没有重载该函数。
其实在基于CWinApp的程序中InitApplication和InitInstance都只执行一次。InitApplication是MFC的较老的入口函数,现在一般不重载InitApplication而直接重载InitInstance。
不过如果使用CWinThread或者AfxBeginThread创建线程,新的线程会执行新建CWinThread对象的InitInsatnce函数一次。不过这和CWinApp没有关系。
InitInstance函数相关推荐
- VC InitInstance函数
VC InitInstance函数 BOOL InitInstance()为什么说它是程序的进入点?还有,那个WinMain函数又有什么作用,这两个函数之间有什么关系吗? BOOL InitInsta ...
- MFC中的InitInstance()函数应该怎样理解
https://zhidao.baidu.com/question/29097884.html
- (转)对各种初始化函数的理解:OnInitDialog、InitInstance、InitApplication函数的理解...
InitInstance和InitApplication 是 APP 类的初始化.而 OnInitDialog 是在 Dialog 类初始化时调用的函数. ★ 应用程序相关配置,一般在InitInst ...
- 使用基本的socket函数
1.socket库的2.2版本的文件: dll文件:ws2_32.dll lib文件:ws2_32.lib 头文件:<WINSOCK2.H> 2.socket库的初始化和卸载 2.1-初始 ...
- 孙鑫VC++课程中用到的函数一览
在许多VC教科书中这些函数/方法.结构.宏等比较常见,觉得比较重要,虽然不用记住,但应该知道,所以列举出来,没写出参数和返回值情况,编写程序时还需仔细查看MSDN文档.本人英语水平较差再加上自己的一些 ...
- MFC的Main函数跑哪去了
用习惯了C的人要看一个程序时首先会想到找到那个main函数在哪,然后再顺着往下看.因为main函数作为程序的入口点,整个程序都是从那开始执行的.当在C++中SDK(win32 API project) ...
- javascript 调用C++函数
分3步: 一>实现IDispatch 接口 #ifndef _IDISPIMP_H_ #define _IDISPIMP_H_// idispimp.h class CImpIDispatch ...
- VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)
这里废话不多讲了,因为项目原因,需要开启线程进行处理,在不了解线程的情况下,直接百度一下,然后就使用了,结果可想而知,出现了异常,所以花了一天时间系统学习一下多线程,这里主要是针对win32编程方面的 ...
- 关于mfc常用系统函数的使用及说明
1.AfxMessageBox int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 ); int AFX ...
- html如何调用js的函数返回值,CDHtmlDialog实现调用html中js函数-江湖宵小-搜狐空间...
2008-05-05 14:17 1.在APP的InitInstance()函数中加入AfxEnableControlContainer();以支持ole控件: 2.在CDHtmlDialog::On ...
最新文章
- java methode_Java Method.getTypeParameters方法代码示例
- 边工作边刷题:70天一遍leetcode: day 94-1
- sqlserver ADO.net 查询数据库加锁,事务提交
- php随机数字不重复使等式成立_当随机数遇上量子
- 再聊机器人设计:如何加速开发流程?
- c# 指定打开某个路径下的CMD_【自学C#】|| 笔记 25 文件的操作
- ElectronNetTest
- java变量的声明和数据类型
- 数据可视化网页内容自动抓取工具
- 无需插件只使用浏览器下载b站视频
- 英语简单句——英语句子的基本结构、句子的成分(谓语、主语)、简单句的考点分析
- 说唱天王 Eminem 自传《The Way I am》3
- 搜索引擎的高级搜索语法指令
- Python---爬虫---爬取万余张图片,分门别类
- html表ge模板_40多个漂亮的网页表单设计实例
- 跨年巨作 13万字 腾讯高工手写JDK源码笔记 带你飙向实战
- MyBatis框架的基础用法(增删改查)
- 微信朋友圈得内容可以爬取吗?看完这篇你心里就有底了
- Arcgis开发系列2 - 修改arcgis infowindow 放大和缩小的模板
- Win10 下安装Mathtype6.9 + office2013+EndNote-x8
热门文章
- 系统中了莫名奇怪的毒,杀毒软件不起作用了,怎么办
- [转载] 非诚勿扰2
- 写程序需要做的几件事
- 浅析GestureDetector
- 对有父子关系的层级数据项,递归实现绑定到ListControl进行树状列表化的分层输出...
- 权重尺寸的计算,张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算,以及FC的维度卷积替代方案
- 最小二乘方法和RANSAC的改进算法PROSAC和LMEDS
- 1.1 矩阵与线性方程组-矩阵的基本运算
- 李航教授展望自然语言对话领域:现状与未来
- 开发必学的验证码,教你从零写一个验证码