`
- 浏览:
658174 次
-
提示:对于不想理解内部运行过程的,可以不看这一章,可以看了后面的界面设计再回头来看这一章,可能感觉更深刻。 这一次课和上一次的课的重点就是MFC的窗口类创建过程,而要反复说明的就是:MFC的程序和C语言的程序,从执行原理上说,是完全一致的。 抓住这一点,那么对于理解MFC程序的运行机制也就相对于简单了。 C中的main函数就相当于MFC中的WinMain函数。 感兴趣的可以利用VC的断点设置自己跟踪下面讲述的各个函数,就明白它的执行顺序了。 一、C语言程序执行步骤 在C语言中,大约的步骤如下: 1, 全局变量内存分配 2, 进入main函数 二、MFC程序的运行步骤(主要是初始化) 打开一个MFC APPWizard(exe)工程,跟踪其执行步骤,可以发现,是以下顺序: 1) CXXApp中的全局变量定义 CXXApp theApp; 2) 调用CXXApp构造函数 CXXApp ::CXXApp(){} 3) 进入Winmain函数(_tWinMain为宏,值为WinMain) _tWinMain(){} 4) 完成初始化工作:包括窗口类注册、窗口产生、显示和更新 pThread->InitInstance() 对于MFC程序,MainFrame,View,ToolBar,Controlbar等都是窗口,所以下面的窗口注册与创建、显示等要反复调用多次,一次对应一个窗口 (1) 注册窗口类 AfxEndDeferRegisterClass (2) 创建窗口 CMainFrame::PreCreateWindow()//反复调用一次是给我们修改窗口属性的机会 CFrameWnd::Create() (3) 消息循环 PumpMessage() 补充1: 在MFC中,由于涉及到(窗口)类定义,所以定义全局变量的时候,需要进行更多的步骤。 全局变量涉及到类定义(类似于C中的类型定义)的话,那么需要遵循以下步骤(以MFC的窗口类为例) 1) 设计一个窗口类 2) 注册窗口类 3) 创建窗口 4) 显示及更新窗口 5) 消息循环 补充2:其他需要注意的几点 1, 每一个MFC程序,有且只有一个从WinApp类派生的类(应用程序类),也只有一个从应用程序类所事例化的对象,表示应用程序本身。在WIN32程序当中,表示应用程序是通过WINMAIN入口函数来表示的(通过一个应用程序的一个事例号这一个标识来表示的)。在基于MFC应用程序中,是通过产生一个应用程序对象,用它来唯一的表示了应用程序。 2, _tWinMain函数中通过调用AfxWinMain()函数来完成它要完成的功能。(Afx*前缀代表这是应用程序框架函数,是一些全局函数,应用程序框架是一套辅助生成应用程序的框架模型,把一些类做一些有机的集成,我们可根据这些类函数来设计自己的应用程序)。 3, 设计窗口类:在MFC中事先设计好了几种缺省的窗口类,根据不同的应用程序的选择,调用AfxEndDeferRegisterClass()函数注册所选择的窗口类。 4, PreCreateWindow()是个虚函数,如果子类有则调用子类的。 5, CreateWindowEx()函数参数与CREATESTRUCT结构体成员完全一致,CreateWindowEx()函数与CREATESTRUCT结构体参数的对应关系,使我们在创建窗口之前通过可PreCreateWindow(cs)修改cs结构体成员来修改所要的窗口外观。 6,注意两个函数。 ::TranslateMessage(&m_msgCur)函数进行消息(如键盘消息)转换 ::DispatchMessage(&m_msgCur)函数分派消息到窗口的回调函数处理(实际上分派的消息经过消息映射,交由消息响应函数进行处理。) 7,可以认为View类窗口是CMainFram类窗口的子窗口。DOCument类是文档类。DOC-VIEW结构将数据本身与它的显示分离开。 文档类用于数据的存储,加载;视类用于数据的显示,修改 8,CTEApp::InitInstance()函数中通过文档模板将文档类,视类,框架类的有机组织一起。语句如下: CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CTEDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CTEView)); AddDocTemplate(pDocTemplate);//增加到模板 补充3:本课涉及到MFC函数的源文件位置 根目录 找到您安装VC98下MFC的位置,比如我的机子上为:D:\Program Files\Microsoft Visual Studio\VC98\MFC。下面提供的就是相对路径了。 CWinApp构造函数: MFC=>SRC=\'#\'" /span>
AfxWinMain:MFC=>SRC=\'#\'" /span>
AfxEndDeferRegisterClass: MFC=>SRC=\'#\'" /span>
CFrameWnd::PreCreateWindow()函数所在文件:MFC=>SRC=\'#\'" /span>
CFrameWnd::Create()函数路径:MFC=>SRC=\'#\'" /span>
CWnd::CreateEx()函数路径:MFC=>SRC=\'#\'" /span>
CWinThread::Run()方法路径:MFC=>SRC=\'#\'" style="line-height:25px;font-family:'宋体';background-color:#eeeeee;">提示:对于不想理解内部运行过程的,可以不看这一章,可以看了后面的界面设计再回头来看这一章,可能感觉更深刻。
这一次课和上一次的课的重点就是MFC的窗口类创建过程,而要反复说明的就是:MFC的程序和C语言的程序,从执行原理上说,是完全一致的。
抓住这一点,那么对于理解MFC程序的运行机制也就相对于简单了。
C中的main函数就相当于MFC中的WinMain函数。
感兴趣的可以利用VC的断点设置自己跟踪下面讲述的各个函数,就明白它的执行顺序了。
一、C语言程序执行步骤
在C语言中,大约的步骤如下:
1, 全局变量内存分配
2, 进入main函数
二、MFC程序的运行步骤(主要是初始化)
打开一个MFC APPWizard(exe)工程,跟踪其执行步骤,可以发现,是以下顺序:
1) CXXApp中的全局变量定义
CXXApp theApp;
2) 调用CXXApp构造函数
CXXApp ::CXXApp(){}
3) 进入Winmain函数(_tWinMain为宏,值为WinMain)
_tWinMain(){}
4) 完成初始化工作:包括窗口类注册、窗口产生、显示和更新
pThread->InitInstance()
对于MFC程序,MainFrame,View,ToolBar,Controlbar等都是窗口,所以下面的窗口注册与创建、显示等要反复调用多次,一次对应一个窗口
(1) 注册窗口类
AfxEndDeferRegisterClass
(2) 创建窗口
CMainFrame::PreCreateWindow()//反复调用一次是给我们修改窗口属性的机会
CFrameWnd::Create()
(3) 消息循环
PumpMessage()
补充1:
在MFC中,由于涉及到(窗口)类定义,所以定义全局变量的时候,需要进行更多的步骤。
全局变量涉及到类定义(类似于C中的类型定义)的话,那么需要遵循以下步骤(以MFC的窗口类为例)
1) 设计一个窗口类
2) 注册窗口类
3) 创建窗口
4) 显示及更新窗口
5) 消息循环
补充2:其他需要注意的几点
1, 每一个MFC程序,有且只有一个从WinApp类派生的类(应用程序类),也只有一个从应用程序类所事例化的对象,表示应用程序本身。在WIN32程序当中,表示应用程序是通过WINMAIN入口函数来表示的(通过一个应用程序的一个事例号这一个标识来表示的)。在基于MFC应用程序中,是通过产生一个应用程序对象,用它来唯一的表示了应用程序。
2, _tWinMain函数中通过调用AfxWinMain()函数来完成它要完成的功能。(Afx*前缀代表这是应用程序框架函数,是一些全局函数,应用程序框架是一套辅助生成应用程序的框架模型,把一些类做一些有机的集成,我们可根据这些类函数来设计自己的应用程序)。
3, 设计窗口类:在MFC中事先设计好了几种缺省的窗口类,根据不同的应用程序的选择,调用AfxEndDeferRegisterClass()函数注册所选择的窗口类。
4, PreCreateWindow()是个虚函数,如果子类有则调用子类的。
5, CreateWindowEx()函数参数与CREATESTRUCT结构体成员完全一致,CreateWindowEx()函数与CREATESTRUCT结构体参数的对应关系,使我们在创建窗口之前通过可PreCreateWindow(cs)修改cs结构体成员来修改所要的窗口外观。
6,注意两个函数。
::TranslateMessage(&m_msgCur)函数进行消息(如键盘消息)转换
::DispatchMessage(&m_msgCur)函数分派消息到窗口的回调函数处理(实际上分派的消息经过消息映射,交由消息响应函数进行处理。)
7,可以认为View类窗口是CMainFram类窗口的子窗口。DOCument类是文档类。DOC-VIEW结构将数据本身与它的显示分离开。
文档类用于数据的存储,加载;视类用于数据的显示,修改
8,CTEApp::InitInstance()函数中通过文档模板将文档类,视类,框架类的有机组织一起。语句如下:
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTEDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTEView));
AddDocTemplate(pDocTemplate);//增加到模板
补充3:本课涉及到MFC函数的源文件位置
根目录
找到您安装VC98下MFC的位置,比如我的机子上为:D:\Program Files\Microsoft Visual Studio\VC98\MFC。下面提供的就是相对路径了。
CWinApp构造函数: MFC=>SRC=\'#\'" /span>
AfxWinMain:MFC=>SRC=\'#\'" /span>
AfxEndDeferRegisterClass: MFC=>SRC=\'#\'" /span>
CFrameWnd::PreCreateWindow()函数所在文件:MFC=>SRC=\'#\'" /span>
CFrameWnd::Create()函数路径:MFC=>SRC=\'#\'" /span>
CWnd::CreateEx()函数路径:MFC=>SRC=\'#\'" /span>
CWinThread::Run()方法路径:MFC=>SRC=\'#\'" target="_blank" href="http://img1.51cto.com/attachment/201311/111407865.jpg">
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
现代OpenGL+Qt学习笔记之二:程序框架http://blog.csdn.net/chaojiwudixiaofeixia/article/details/77917697源码。
VC++ SQL 学习 笔记 VC++ SQL 学习 笔记 VC++ SQL 学习 笔记 VC++ SQL 学习 笔记
VC++深入学习笔记
vc++中常用控件的学习 学习笔记 vc++经验
前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, ...
VC++视频笔记资料 一、MFC的概念和作用 1、什么是MFC? 全称:Microsoft Foundation Class Library(微软基础类库) 1-MFC从硬盘存在形式来说就是一个库(静态MFC库、动态MFC库) 2-MFC从原理来说...
MFC-lesson3-AppWizard的原理与MFC程序框架的剖析.rar 包含课程内容、视频、PPT、笔记。内容详尽,MFC珍藏。
学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记...
MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记 MFC笔记
VC++就业培训宝典之MFC电子书,一共6个part,文件总大小200多M
mfc创建程序框架步骤笔记,本文件在源文件基础上简化,以利于记忆
[转载]Android学习笔记(三):Andriod程序框架
VC++MFC学习笔记,内容全面详细,涵盖了网络、数据库、多线程等各个方面,MFC原理及多数MFC控件,包含大量代码示例。易于学习。
VC++学习笔记总结
VC++ 技术内幕 笔记 潘爱民VC++ 技术内幕 笔记 潘爱民VC++ 技术内幕 笔记 潘爱民VC++ 技术内幕 笔记 潘爱民VC++ 技术内幕 笔记 潘爱民VC++ 技术内幕 笔记 潘爱民VC++ 技术内幕 笔记 潘爱民VC++ 技术内幕 笔记 潘爱民...
VC++NET学习笔记(第二章)
DX游戏开发学习笔记,汇集了大量DX文章,内容循序渐进、娓娓道来,将DX的基础知识和难点解析得淋漓尽致,是一本DX入门不可多得的小册子。
[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip...
DLL(VC++)学习笔记(详细注释)
MFC的学习笔记,从windows API处理,消息响应机制,MFC框架,MFC内部机制,到MFC控件,MFC类库使用,多线程,DLL,数据库等