VC 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没有关系。

VC InitInstance函数相关推荐

  1. 【C/C++】概念: VC虚函数布局引发的问题

    2011-04-21 16:48:25|  分类: C / C++|字号 订阅 在网上看到一个非常热的帖子,里面是这样的一个问题: 在打印的时候发现pFun的地址和 &(Base::f)的地址 ...

  2. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  3. vc++ cos 函数_cos()函数以及C ++中的示例

    vc++ cos 函数 C ++ cos()函数 (C++ cos() function) cos() function is a library function of cmath header, ...

  4. VC回调函数定义和使用

    最近经常使用回调函数,有时感觉有点混乱,对回调函数理解不透,昨天花点时间深深品味了一下回调函数,写下博客记录一下,言规正转,VC中的定时器是一种特殊的回调函数,只要我们设置好了定时器,我们就不用管什么 ...

  5. VB调用VC DLL函数

    -------------------------VC部分-------------------------------------声明 ******************************* ...

  6. VC++CopyFile函数的用法

    CopyFile函数定义在Windows.h中,使用时要include之: CopyFile()使用如下: #include <Windows.h>int main() {CopyFile ...

  7. vc++ C函数atoi和itoa的用法总结(转载)

    atoi C语言库函数名: atoi 功 能: 把字符串转换成整型数. 名字来源:array to integer 的缩写. 函数说明: atoi()会扫描参数nptr字符串,如果第一个字符不是数字也 ...

  8. VC GetDC()函数

    函数功能:该函数检索一指定窗口的客户区域或整个屏幕的显示 设备上下文 环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图. GetDCEx函数是GetDC的一个扩展,它能使 应用程序 ...

  9. vc类型转换函数大全

    windows c++中存在各种类型,在实际应用过程中也需要将类型互相转换,故整理了常用类型之间的转换并将之封装成函数,仅供参考,有什么不对的地方,还请指正! ******************** ...

最新文章

  1. C语言经典程序之:求十个整数中的最大最小数并输出(指针)
  2. 内存是拿来用的不是拿来看的
  3. 关于选择博客网站的一点看法
  4. mysql十万条数据_2秒内向数据库中插入十万条数据?
  5. Java Se相关测试题(偏线程、集合)含答案及详解
  6. java中常用的IO,你可否分得清、流的分类
  7. 日文输入法快捷键整理
  8. Html页面Js调用android本地相机和图片
  9. 微信小程序--优购页面制作
  10. Flutter开发之——Icon图标
  11. 工业互联网时代下橙色云CDS的诞生
  12. Python 之嵌套列表
  13. python异步协程实战:wallhaven壁纸网站
  14. CSS三种样式表:行内样式表、内部样式表、外部样式表
  15. 五轮技术+两轮hr,历经7面通过阿里测试岗面试,27K*16薪,成功上岸...
  16. Filebeat日志采集器实例
  17. 软件公司安全教育培训经验分享
  18. php 正则匹配特定中文,中文正则(正则表达式匹配指定中文)
  19. DirectPlay学习笔记[1]
  20. 【过零检测】市电过零检测电路参考设计

热门文章

  1. js与java对json的操作
  2. [HNOI2015]开店(树剖+主席树+标记永久化)
  3. [LeetCode] 204. Count Primes
  4. LaunchImage命名与AppIcon命名(ios设置 启动图片和AppIcon图片)
  5. IntelliJ IDEA15,PhpStorm10,WebStorm11激活破解
  6. 【转】linux时钟jiffies及其相关
  7. 第八节:SpringBoot指定配置文件配置三
  8. Java-Parallel GC介绍
  9. 原型模式(Prototype )
  10. PHP 判断点是否在多边形内