深入浅出MFC——MFC程序的生死因果(三)
1. 本章主要目的:从MFC程序代码中检验出一个Windows程序原本该有的程序进入点(WinMain)、窗口类注册(RegisterClass)、窗口产生(CreateWindow)、消息循环(Message Loop)、窗口函数(Window Procedure)等等操作。抽丝剥茧,彻底理解一个MFC程序的诞生与结束,以及生命过程。
2. 熟记MFC类的层次结构:
3. CWinApp和CFrameWnd:
(1)CWinApp(AFXWIN.H中声明)——取代WinMain的地位。
注:CWinApp记录主窗口的handle(或是主窗口对应之C++对象)——m_pMainWnd已经被移往CWinThread中了(它是CWinApp的父类)(AFXWIN.H)。
(2)CFrameWnd——取代WndProc的地位:CFrameWnd主要用来掌握一个窗口。
4. Application object:在CWinApp派生类(如CMyWinApp类)中定义的全局变量(如theApp)。
5. AfxWinInit——AFX内部初始化操作(APPINIT.CPP和THRDCORE.CPP,跟踪源码):
6. CWinApp::InitApplication :程序本体执行一次。
7. CMyWinApp::InitInstance:每一个实例执行一次。
8. CFrameWnd::Create:
(1)产生主窗口(并先注册窗口类)。
(2)CFrameWnd::Create在产生窗口之前,会先引发窗口类的注册操作。(跟踪CFrameWnd::Create源码),CFrameWnd::Create——>CWnd::CreateEx——>CFrameWnd::PreCreateWindow:
(3)窗口类注册相关定义:
(4)AfxEndDeferRegisterClass完成窗口类注册操作:
9. 窗口显示与更新:
10. CWinApp::Run——程序生命的活水源头
CWinApp::Run——>CWinThread::Run——>CWinThread::PumpMessage.
11. 把消息与处理函数连接在一起:Message Map机制。MFC提供了两组宏:
12. 小结MFC程序的诞生:
13. Callback函数:凡是由你设计而却由Windows系统调用的函数,统称为callback函数。(对成员函数的调用,我们知道,内存中只会有一份类成员函数,但却可能有许多份类成员变量——每个对象拥有一份。故而,C++会以隐含的this指针指出正确的对象)。callback函数是给Windows调用的,Windows并不借助任何对象调用这个函数,也就没有传递this指针给callback函数,于是导致堆栈中有一个随机变量会成为this指针,而其结果就是程序的崩溃。所以要把某个函数用作callback函数,必须告诉C++编译器,不要让this指针作为该函数的最后一个参数,可采用如下方法:
(1)不要使用类的成员函数(也就是说,要使用全局函数)作为callback函数;
(2)使用static成员函数,也就是在函数前面加上static修饰词。static的东西是类的一部分,不属于对象。
14. 通用对话框:
深入浅出MFC——MFC程序的生死因果(三)的更多相关文章
- [转]《深入浅出MFC》– MFC程序的生死因果
1.首先MFC程序需要哪些函数库? Windows C Runtime函数库 LIBC.LIB C Runtime函数库的静态链接版本 MSVCRT.LIB C Runtime函数 ...
- 【笔记】《深入浅出MFC》第6章 MFC程序的生死因果
一.头文件说明 STDAFX.H 这个文件用来作为Precompile header file,其内只是载入其他的MFC头文件.应用程序通常会准备自己的头STDAFX.H. AFXWIN.H 每一个W ...
- 深入浅出MFC——MFC骨干程序(四)
1. 熟记MFC类层次结构: 2. AppWizard可以为我们制作出MFC程序骨干: 3. Document/View支撑你的应用程序:Document/View的价值在于,这些MFC类已经把一个应 ...
- MFC应用程序框架(转)
对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便.其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用 ...
- MFC应用程序框架入门(转)
1 MFC概述 顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的.自20世纪90年代初问世以来,M ...
- MFC应用程序向导生成的文件
比方说我们用Visio Studio创建了一个MFC应用程序,名称为Mysdi.在创建这个项目的时候,默认的会生成许多类和文件,就关于这些文件的内容和要点展开以下论述. 框架窗口类头文件 向导为项目M ...
- MFC原理第一讲.MFC的本质.以及手工编写MFC的程序
MFC原理第一讲.MFC的本质.以及手工编写MFC的程序 PS: 这个博客属于复习知识.从头开始讲解. 在写这篇博客之前.已经写了3篇MFC的本质了.不过掌握知识点太多.所以从简重新开始. 一丶MFC ...
- [转]深入理解MFC中程序框架
最近抽空复习了一下MFC的内容,觉得一篇博文写的不错. 原文内容太多直接给出链接吧:深入理解MFC中程序框架 链接2:深入浅出话VC++(2)——MFC的本质 链接3:MFC单文档/视图结构穷追猛打
- 01:MFC应用程序编程
一 MFC的发展 VC 1.0->VC 5.0->VC 6.0->VC2008 SP1)->VS2010 二 MFC基础 1 MFC 微软基础类库 采用类的方式,将Win32 ...
随机推荐
- Android WiFi 扫描流程分析(wpa_supplicant)
void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec) { int res; if (wpa_s-& ...
- 多媒体开发之rtmp---rtmp client 端的实现
去年我就在流媒体朋友圈认识winlin 老乡,本来想参与srs的开发,可惜今年5月份身体不好,今天想起rtmp 做直播,有翻到老乡的博文如下: http://blog.csdn.net/win_lin ...
- om.ibm.ws.jsp.translator.JspTranslationException:JSPG0227E解决办法
原文链接:http://blog.163.com/rambosir@126/blog/static/124116406201212834417/ 今天在完成功能后,将jsp页面部署至websphere ...
- JSP九大内置对象与Servlet学习笔记[转]
我们常说的JSP有九大内置对象分别为:request.response.session.out.pagecontext.page.exception.application.config. 我们知道, ...
- eclipse 安装图形插件(图形化编程)
打开eclipse 查看什么版本 ,我的是Oxygen help --> install newsoftware 打开地址 http://www.eclipse.org/windowbuilde ...
- 安卓开发笔记——GridView组件
1.什么是GridView? GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的. 2.正文 GridVi ...
- 有关maven不能加载ojdbc14.jar解决方法
首先下载ojdbc14-10.2.0.4.0.jar这个包,然后在cmd下输入以下 mvn install:install-file -DgroupId=com.oracle -DartifactId ...
- 小程序navigator跳转路径url写法
小程序navigator跳转路径url要写 要跳转的的页面文件夹相对于当前页面的页面文件夹的位置,即相对路径. 比如我当前页面跳转到同级目录下的另一个页面如下: <navigator url= ...
- centos6.5环境 安装php5.5.30的redis扩展 介绍
1.下载软件包 wget http://pecl.php.net/get/redis-2.2.5.tgz 2.解压 tar zxvf redis-2.2.5.tgz 3.进入 ...
- mysql中查看某个日期是星期几?如何知道某个日期是星期几?某个日期是周几?
需求描述: mysql中,如果要查看某个日期是星期几,可以用date_format函数实现,在此记录下. 操作过程: 1.通过date_format函数查看某个日期是星期几 mysql> sel ...