MFC中五个初始类的作用
2015-06-19 21:12
225 查看
[+]
CApp定义了窗体加载之前需要做的预处理比如一个加密的软件打开后提示用户输入密码这个事件的处理程序就要写在CApp的InitInstance中
CMainFrame包含了对工具栏状态栏窗口的定义 CView包含了最主要的处理功能如菜单操作快捷键用户交互操作等 CAboutDlg定义了ABOUT对话框
一个最基本的单文档视图的MFC程序,包含CxxApp、CxxDoc、CMainFrame、CxxView和CAboutDlg五个类。
CMainFrame()包含了对工具栏、状态栏、窗口的定义。
其中,前四个都是在程序主窗口出现之前被创建的,CAboutDlg是在“关于”对话框弹出时被创建的
MFC中dodataexchange的作用:
将界面上的控件与一个变量或者一个类对象相关联!
数据交换
例如文本框控件 当关联了一个变量的时候 就需要在这个控件和这个变量之间通过DoDataExchange建立联系
然后通过调用UpdateData选择当用户更改了输入的时候 是否更新变量值
或更改程序变量值后是否更新界面
操作注意问题:.
CApp定义了窗体加载之前需要做的预处理比如一个加密的软件打开后提示用户输入密码这个事件的处理程序就要写在CApp的InitInstance中
CMainFrame包含了对工具栏状态栏窗口的定义 CView包含了最主要的处理功能如菜单操作快捷键用户交互操作等 CAboutDlg定义了ABOUT对话框
一个最基本的单文档视图的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文件头开始执行,<span style="color:#ff0000;">在进入Winmain函数之前,进行一系列的必备的初始化。 </span> <span style="color:#ff0000;">MFC对这一系列的过程进行了封装。提供给编程人员的第一个裸露程序入口就是CWinApp的InitInstance(),其实程序的入口依然是WinMain()函数</span>。 大家都知道,<span style="color:#cc0000;">每个程序都有拥有一个进程,每个进程至少有一个线程就是主线程</span>。<span style="color:#ff0000;">CWinThread类是MFC用来封装线程的</span><span style="color:#ff0000;">,这个主线程就是在WinMain函数中创建的,包括UI线程和工作者线程</span>。因此每个MFC程序至少使用一个CWinThread派生类。被MFC程序员熟知的CWinApp应用类就从这里派生。 <span style="color:#ff0000;">InitInstance是CWinThread的一个虚函数,InitInstance就是“初始化实例”的意思</span>,可见,它是在<span style="color:#ff0000;">实例创建时首先被调用的</span>。应用程序总要重载这个虚函数,进行系统设置,创建运行环境。例如,主窗口一定要在InitInstance()中创建,因为该函数退出后就进入该线程的消息循环。 MFC执行流程。 <span style="color:#ff0000;">_tWinMain(WinMain的别名,用define替换的)-》AfxWinMain->初始化线程,调用InitInstance初始化窗口,调用Run函数进入消息循环。 </span>希望对你有用。 <pre id="content-101731872" class="reply-text mb10" name="code">看看MSDN的解释:实际上windows允许一个程序同时运行多次,每一次都称为一个“<span style="color:#ff0000;">实例”(instance)。</span>在每一个实例开始的时候系统都会调用<span style="color:#cc0000;">initinstance()这个函数进行初始化。 </span>
MFC中dodataexchange的作用:
将界面上的控件与一个变量或者一个类对象相关联!
数据交换
例如文本框控件 当关联了一个变量的时候 就需要在这个控件和这个变量之间通过DoDataExchange建立联系
然后通过调用UpdateData选择当用户更改了输入的时候 是否更新变量值
或更改程序变量值后是否更新界面
操作注意问题:.
<span style="color:#ff0000;">1.调用UpdateData选择当用户更改了输入的时候 是否更新变量值</span>2.当在按钮中,引入另一个类时,必须在未设置按钮函数时候,就已经创建好将要引入的类,否则会造成无法读取要引入的类,!!!
我的理解是主函数的入口函数
相关文章推荐
- 剑指offer--面试题22:栈的压入、弹出序列--Java实现
- 马化腾和他的腾讯帝国
- 【华为oj】自守数
- 蒙特卡洛思想之布丰投针实验
- ASP.NET MVC 开启AJAX跨域请求
- sublime text 2安装Emment插件
- UIView动画
- 蒙特卡洛思想之布丰投针实验
- Remote Actor
- shell学习十八天----文本排序
- 模板队列Queue类
- 【二维数组内存申请】
- VC 之 cout 与 wcout 区别及 wchar_t、CharSet、CodePage 等相关概念解析
- 我们应该怀念爱因斯坦的五个原因
- 网络图片查看器
- java笔记19 Collections和Arrays
- 怎样实现url隐形转发?
- 【剑指offer】面试题15、链表中倒数第 K 个结点
- ZK tree使用mold
- 【剑指offer】面试题14、调整数组顺序使奇数位于偶数前面