InitInstance和InitApplication 是 APP 类的初始化。而 OnInitDialog 是在 Dialog 类初始化时调用的函数。

  ★ 应用程序相关配置,一般在InitInstance()调用。InitInstance()是初始化实例,是WinThread的线程初始化函数,完成WinApp线程初始化。

  ★ 基于对话框的应用程序中,由于主窗体就是一个Dialog,所以看上去似乎OnInitDialog中也可以放置一些初始化应用程序的代码。但实际上,OnInitDialog是一个消息处理函数,只是在Dialog显示之前、初始化时调用,响应WM_INITDIALOG消息。Dialog相关子窗口就可以放在这里初始化。


  BOOL InitInstance() 为什么说它是程序的进入点?还有,那个 WinMain 函数又有什么作用,这两个函数之间有什么关系吗?

  BOOL InitInstance()是MFC的CWinApp类的成员函数,而WinMain才是真正的入口点,但是MFC不允许程序中有WinMain这个函数,因为MFC自己编写了WinMain函数,如果程序中再定义就重复定义了,而 MFC编写的WinMain函数则调用了CWinApp::InitInstance函数,所以InitInstance看起来似乎就是MFC程序的入口点。


 

   InitInstance是虚函数,继承类必须提供其实现代码,完成整个消息链的启动。

  在CWinApp这个类中除了有一般类都有的构造函数,一个重要的成员函数就是InitInstance,我们知道,在WINDOWS环境下面可以运行同一程序的多个实例(非模态),函数InitInstance的作用就是:在生成一个新的实例的时候,完成一些初始化工作

  Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的 初始化 可以被分为两个部分(由MFC中CWinApp的两个虚函数负责完成):

  1、一次性的应用程序初始化工作,这些在应用程序第一次运行时完成(InitApplication:“每一个程序只做一次”);

  2、实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时(InitInstance:“每一个例程都得做一次”)。框架中WinMain实现调用这个函数,重载InitInstance以初始化在Windows下运行的应用程序的每个新实例(通常,重载InitInstance以构造主窗口对象并设置CWinThread::m_pMainWnd数据成员,使其指向这个窗口)。 

  注: “每一个程序”指的是进程的概念,“每一个例程”指的是线程的概念。InitInstance是每一个线程都具有的函数,只不过很多情况下,你自己开的线程没有重载该函数。其实在基于CWinApp的程序中InitApplication和InitInstance都只执行一次。InitApplication是MFC的较老的入口函数,现在一般不重载InitApplication而直接重载InitInstance。不过如果使用CWinThread或者AfxBeginThread创建线程,新的线程会执行新建CWinThread对象的InitInsatnce函数一次。不过这和CWinApp没有关系。

转载于:https://www.cnblogs.com/thestral-rebirth/p/5361590.html

(转)对各种初始化函数的理解:OnInitDialog、InitInstance、InitApplication函数的理解...相关推荐

  1. php内核函数手册,深入理解PHP内核(五)函数的内部结构,深入理解内部结构

    深入理解PHP内核(五)函数的内部结构,深入理解内部结构 php的函数包括用户定义的函数.内部函数(print_r count...).匿名函数.变量函数($func = 'print_r'; $fu ...

  2. 深入理解PHP内核(五)函数的内部结构

    php的函数包括用户定义的函数.内部函数(print_r count...).匿名函数.变量函数($func = 'print_r'; $func(array('a','b'));) PHP内核源码中 ...

  3. 彻底理解JavaScript中回调函数 (推荐)

    在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply() ...

  4. go interface转int_32. 一篇文章理解 Go 里的函数

    大家好,我是明哥. 由于某些不可抗力,之前该专栏的所有内容都被删除了.因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒. 本文原文:http://golang.iswbm.com ...

  5. js调用php函数兵每秒刷新,深入理解JavaScript立即调用函数表达式(IIFE)

    立即调用函数 目录一.了解立即调用函数表达式 二.立即调用函数表达式报错了? 三.使用立即调用函数的正确姿势 四.常见使用场景 写在最后 一.了解立即调用函数表达式 1.1 思维导图 1.2 什么是立 ...

  6. 深入理解javascript系列(十七):函数柯里化

    之前的系列,我们介绍了什么是高阶函数.所有以函数作为参数的函数,都可以叫作高阶函数.并且我们常常利用高阶函数来封装一些公共逻辑. 本次,我们要继续学习,继续记录,柯里化.柯里化,其实就是高阶函数的一种 ...

  7. go 函数名之前括号中的内容_2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数

    1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构.将一段功能复杂.很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性. 在 Go 语言中,函数可以分为两种: 带 ...

  8. python函数可以作为容器对象吗_正确理解Python函数是第一类对象

    正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...

  9. python怎么用gamma函数_如何通俗的理解伽马(gamma)函数

    如何通俗的理解伽马(gamma)函数 - 直觉,求导和示例 我为什么要在乎garmma分布? 使用伽马函数定义了许多概率分布,例如伽马分布,Beta分布,狄利克雷分布,卡方分布和学生t分布等. 对于数 ...

最新文章

  1. 第二百二十节,jQuery EasyUI,Slider(滑动条)组件
  2. C语言文件操作函数大全
  3. $.ligerdialog.open中确定按钮加事件_彻底搞懂JavaScript中的this指向问题
  4. 微软亚研院:如何看待计算机视觉未来的走向?
  5. ascii码01100001_ASCII编码和Unicode编码
  6. FlashCC学习札记
  7. php html标签自定义属性,浅谈JS读取DOM对象(标签)的自定义属性
  8. SQLite | Case 子句
  9. 文本相似性度量---------字符串近似相等
  10. android Service 的简单使用
  11. 解决Object() takes on paramenters的问题
  12. Java使用ffmpeg和mencoder实现视频转码
  13. c语言jni调用外部函数,(转)JNI调用C函数
  14. Linux-v10-01天-授课
  15. esxi 命令行格式化硬盘
  16. 百度排名批量查询_企业网站建设,核心关键词排名丢失,怎么办?
  17. DAZ Studio 4—3D动画制作工具
  18. 智能车寻线算法之北科寻线可能用的方法
  19. 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
  20. Centos7.x上安装cerebro

热门文章

  1. 2020年电商上市公司市值梯队
  2. 跟着老板创业3年,团队从4人到40多人
  3. 微信支付宝是如何赚钱的?
  4. 手机怎样才能接收到五公里外的WiFi信号?
  5. 解决miner.start() 返回null
  6. Qt——P26 Label控件显示图片
  7. 计算机四级数据库往年考试题,全国计算机等级考试四级数据库论述题历年真题(四年)...
  8. java setrotation_Java 在Word文档中添加和旋转图形
  9. mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射
  10. 修改MongoDB密码