WinApp封装了程序的主入口WinMain,WinMain就和C语言的main函数地位一样,是Win32程序的入口。在MFC的封装中,一个程序启动,Windows调用WinMain,这个WinMain函数现在由MFC事先写好藏好了,你不能也不需要修改,在这个预定义的WInMain里面会调用CWinApp的IniInInstance函数。在InitInstance函数,CMainFrame的对象被创建,文档模板被创建,主窗口通过ShowWindow(SW_SHOW)被显示出来。

  CMainFrame是个框架,是你整个应用程序的主窗口,负责管理应用程序的菜单,工具栏,状态栏等。中间的区域是客户区,由View类来管理,View类也是一个窗口,是MainFrame的子窗口。OnDraw函数负责绘制客户区的内容,你调用View类的UpdateWindow,或者在Document类中调用UPdateAllViews等等,MFC会自动调用OnDraw。他还会被Window调用,Windows在需要刷新窗口的时候发送给窗口WM_PAINT消息,MFC事先预定义了,在响应WM_PAINT消息的时候会调用OnDraw。 那么什么时候窗口会发送WM_PAINT消息呢,比如窗口从最小化还原,比如窗口被用户改变了大小等等。

  程序在进入WinMain函数之前做很多事情,初始化DOS头,分配函数表,初始化全局变量,之后才进入WinMain。

  MFC对Windows API进行封住请。MFC编译器链接器把源文件编译成PE文件格式,存储在磁盘上。程序执行的时候,从PE文件头开始执行,在进入Winmain函数之前,进行一系列的必备的初始化。

  MFC对这个过程进行封装,提供给编程人员的第一个裸露程序入口就是CWinApp的InitInstance(),其实程序的入口依然是WinMain()函数。

  每个程序都有一个进程,每个进程至少有一个线程就是主线程。CWinThread类是MFC用来封装线程的。这个主线程就是在WinMain函数中创建的,包括UI线程和工作者线程。因此每个MFC程序至少使用一个CWinThread派生类。被MFC程序员熟知的CWinApp应用类就从这里派生。

  InitInstance是CWinThread的一个虚函数,它是在实例创建时首先被调用的。应用程序总是要重载这个虚函数,进行系统设置,创建运行环境。主窗口一定要在InitInstance()中创建,因为该函数退出后就进入该线程的消息循环。

  MFC执行流程:_tWinMain(WinMain别名)-》AfxWinMain-》初始化线程,调用InitInstance初始化窗口,调用Run函数进入消息循环。

  MFC中DoDataExchange的作用:将界面上的控件与一个变量或对象关联。

最新文章

  1. Nginx基本使用
  2. java编程题
  3. 源码编译Nodejs 4.6 on CentOS6
  4. Activity代码结构
  5. js时间冒泡,阻止事件冒泡
  6. Warning: Permanently added '...' (RSA) to the list of known hosts --Windows下git bash 警告处理
  7. CloudStack 使用生态统计
  8. LINQ(隐式表达式、lambda 表达式)
  9. iPhone 7-b
  10. Mina学习之IoSession
  11. SQL递归查询知多少
  12. JAVA I/O 字符输出流简要概括
  13. FastReport.NET 中使用二维码
  14. mybatis-自定义typeHandler
  15. Android大学课件SQLite3 数据库操作
  16. python基础2之字符串、列表、字典、集合
  17. dialog 菜单
  18. matlab入门笔记(六):编程基础之M文件
  19. Web开发中需要了解的东西【转载】
  20. luogu5282 【模板】快速阶乘算法

热门文章

  1. javascript练习题(2):变量作用域
  2. git生成和检查秘钥操作
  3. Netty官方示例
  4. Android报错Type Error executing aapt: Return code -1 - HTTP 500
  5. PHP中的定界符
  6. HTML 中 id与name 区别
  7. 不安装APK直接启动应用
  8. dataGridView的使用经验
  9. PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
  10. xhtml html