MFC中五个初始类的作用

原创 2012年03月26日 01:26:42

一个最基本的单文档视图的MFC程序,包含CxxApp、CxxDoc、CMainFrame、CxxView和CAboutDlg五个类。
  它们在程序开始运行时被创建的顺序是:CxxApp 、CxxDoc 、CMainFrame 、CxxView 、CAboutDlg 。

       C**App()定义了窗体加载之前需要做的预处理。比如一个加密的软件,打开后提示用户输入密码。这个事件的处理程序就要写在C**App()的InitInstance(中。                                      

    CMainFrame()包含了对工具栏、状态栏、窗口的定义。
    C**View包含了最主要的处理功能,如菜单操作、快捷键、用户交互操作等。
    CAboutDlg定义了ABOUT对话框。

    其中,前四个都是在程序主窗口出现之前被创建的,CAboutDlg是在“关于”对话框弹出时被创建的

1CAboutDlg   //这个是关于对话框 里面是构造和析构2CMainFrame //主框架`是在窗口生成之前准备工作全在这吗  ?3CTestApp//这个是什么`initlnstance()在这里也是初始化什么对象   ? 4CTestDoc//这是文档`是管理哪些文档`对初学者来说很少用呐       ?5CTestView视图`这个常用     OnDraw我了解一些`我想知道`是不是默认就调用一次 ? 还有个问题啊`我想加个音乐`虽然加成功了`但是`我一直不明白加在哪个函数里`运行就有音乐   ?看过孙鑫的教程后来忘了`各位高手各抒已见,互相学习
 
LZ需要系统地学习一下。
CTestApp是基于WinApp的,WinApp封装了程序的主入口WinMain,WinMain就和c语言的main函数地位一样,是Win32程序的入口。在MFC的封装中,一个程序启动,Windows调用WinMain,这个WinMain函数现在由MFC事先写好藏好了,你不能也不需要修改,在这个预定义的WinMain里面会调用CWinApp的InitInstrance函数。你仔细看你CTestApp::InitInstrance函数,在这里一个CMainFrame的对象被创建,文档模板被创建,主窗口通过ShowWindow(SW_SHOW)被显示出来。
 
CMainFrame是个框架,是你整个应用程序的主窗口,他负责管理应用程序的菜单,工具栏,状态栏等。中间的区域,成为客户区,由View类来管理,View类也是一个窗口,他是MainFrame的子窗口。OnDraw函数负责绘制客户区的内容,该函数会被多次调用,他可以被你自己调用,比如你调用View类的UpdateWindow,或者在Document类中调用UpdateAllViews等等,MFC自动会调用OnDraw。他还会被Windows调用,Windows在需要刷新窗口的时候发送给窗口WM_PAINT消息,MFC事先已经预定义了,在响应WM_PAINT消息的时候会调用OnDraw。何时Windows会发送WM_PAINT呢,比如窗口从最小化还原,比如窗口被用户改变了大小等等。这部分内容最好看看Windows GDI,Windows GDI是Windows操作系统整个可视化界面的基础。
 
然后你最后一个问题,何时才能被播放音乐。你仔细想想就容易得到答案了,整个程序从App类的InitInstrance开始,在InitInstranc
学过PE文件格式,你就明白,程序在进入WinMain之前要做很多事情,比如初始Dos头,分配函数表,初始化全局变量。之后才进入程序入口(WinMain)

MFC对WindowsAPI进行了封装。在用向导编译成的二进时代码,MFC编译器链接器把源文件编译成PE文件格式存储在磁盘上。

程序执行的时候,从PE文件头开始执行,在进入Winmain函数之前,进行一系列的必备的初始化。

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

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

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

MFC执行流程。

_tWinMain(WinMain的别名,用define替换的)-》AfxWinMain->初始化线程,调用InitInstance初始化窗口,调用Run函数进入消息循环。

希望对你有用。

看看MSDN的解释:实际上windows允许一个程序同时运行多次,每一次都称为一个“实例”(instance)。在每一个实例开始的时候系统都会调用initinstance()这个函数进行初始化。


MFC中dodataexchange的作用:
将界面上的控件与一个变量或者一个类对象相关联!
数据交换

例如文本框控件 当关联了一个变量的时候 就需要在这个控件和这个变量之间通过DoDataExchange建立联系

然后通过调用UpdateData选择当用户更改了输入的时候 是否更新变量值
或更改程序变量值后是否更新界面


操作注意问题:.
1.调用UpdateData选择当用户更改了输入的时候 是否更新变量值
2.当在按钮中,引入另一个类时,必须在未设置按钮函数时候,就已经创建好将要引入的类,否则会造成无法读取要引入的类,!!!
我的理解是主函数的入口函数

相关文章推荐

CAboutDlg

VC中,CAboutDlg,CDrawApp,CDrawDoc,CDrawView和CMainFrame五个类的关系是怎样的?它们各有什么作用? CAboutDlg 向导自动生成的"关于..."对话...

Media Player Classic - HC 源代码分析 5:关于对话框 (CAboutDlg)

前几篇文章分析了Media Player Classic - HC(mpc-hc)的核心类(CMainFrame): Media Player Classic - HC 源代码分析 2:核心类 (CM...

MFC的DLG的困惑

记得当时刚开始学习vc时,自己也很傻,指导我的人说:mfc的dlg很简单,你就从这个开始吧。于是二话没说,就开始了dlg的艰难旅程。现在想想,会用DLG 做程序的人真的很傻很天真。MFC简单吗?我想...

VC++深入详解(5):MFC对话框(一)

对话框可以分为两大类:模态对话框和非模态对话框。模态对话框是指,当其显示时,程序会暂停执行,直到关闭这个对话框之后,才能继续执行程序中的其他任务。非模态对话框是指,当对话框显示时,允许转而执行程序中的...

MFC消息处理流程

MFC消息处理流程

MFC类的组织结构及主要的类简介

8.2.1 MFC类的组织结构     目前的MFC版本中包含了100多个类,不同的类实现不同的功能,类之间既有区别又有联系。MFC同时还是一个应用程序框架,它帮助定义应用程序的结构以及为应用程序处...

MFC中theApp的用法

在MFC应用程序中,在应用程序类

MFC中app、doc、view类区别与联系

App类就是这个SDI作为"程序"的入口有点像c的Main函数  document/view模式      是为了在逻辑上,让数据和显示分开。 一般在document里,定义document类的成...

MFC之MFC的初始化过程

当你创建好一个MFC程序时,你可能要去找程序的入口,然后各种编辑,各种搞。若你是第一次接触MFC,则会发现怎么也找不到WinMain函数或main函数,一个程序不可能没有程序入口的,这就是接下来要讲的...

MFC中“App类、Doc类、View类”区别与联系

App类就是这个SDI作为”程序”的入口有点像c语言的main()函数 document/view模式 是为了在逻辑上,让数据和显示分开。一般在document里,定义document类的成员变量,...
  • liu6886
  • liu6886
  • 2017年04月01日 17:28
  • 1006
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC中五个初始类的作用
举报原因:
原因补充:

(最多只允许输入30个字)