资源预览内容
第1页 / 共53页
第2页 / 共53页
第3页 / 共53页
第4页 / 共53页
第5页 / 共53页
第6页 / 共53页
第7页 / 共53页
第8页 / 共53页
第9页 / 共53页
第10页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MFC及其应用1 1WINDOWS应用程序一定要有WinMain 函数,该函数用来完成一些特殊的任务, 象创建程序的主窗口,主窗口用来处理消 息的代码。 MFC将WinMain隐藏在框架中,不象写 SDK程序时可以很容易的找到它。 2 2nWINDOWS采用的消息处理机制也交给了 程序框架,我们不必担心如何使这些消息 和代码联系起来 .nWINDOWS定义好了一些消息,当窗口被 创建时系统就会发送WM_CREATE消息.n当点击鼠标左键时便系统会发送 WM_LBUTTONDOWN消息 n当用户按下键盘时系统会发送WM_CHAR消 息 n当用户关闭窗口时系统会发送WM_CLOSE 消息 n当用户进行菜单项选择或单击按钮时系统 回发送WM_COMMAND消息 n什么都不做系统还会发送WM_TIMER消息 3 3nWINDOWS提供通用的图形设备接口( GUI),我们通过调用(GDI)函数和 硬件打交道,不必理会设备环境, WINDOWS会自动将设备环境结构映射 到相应的物理设备,这就是设备无关性 。 n动态连接库(DLL)应该是代码重用的 典型例子(不知道可不可这样说),把 一些模块、自己新编的类单独调试并编 译成DLL,及增加代码的可读性也提高 了程序模块的灵活性。4 4Developer Studio 创建的相关中间文件 nAPS - 支持ResourceView nBSC - 浏览器信息文件 nCLW - 支持ClassWizard nDSP - 项目文件,不能删除和 用文本编辑器编辑 nDSW - 项目文件,不能删除和 用文本编辑器编辑 5 5Developer Studio 创建的相关中间文件nMAK - 外部的创建文件 nNCB - 支持ClassView nOPT - 保存工作空间的配置 nPLG - 建立日志文件 这些文件都有一定的作用,如CLW,如果你有 一个新类,需要加到ClassWizard中,除了将相 应的.h 和.cpp加到DSP中还需要重新编译CLW。 PLG文件记录着你的项目配置信息 6 6MFC 特点 MFC是C+的Microsoft Windows API ,如果想要开发WINDOWS的应用程序 当然VC/MFC是开发环境的首选。 MFC产生的应用程序使用了标准化的结构。 MFC产生的应用程序短而运行速度快。 VC+工具降低了编码的复杂性。 MFC库功能非常丰富。 7 7最简单的MFC例子 ”Hello,World”HELLO WORLD用AppWizard向导创建一个 显示一个字符串的单文档程序,只需要敲入一行 语句,完全体现了MFC的强大功能。 1、打开VC+6从菜单选择NEW,给项目命名为 ”MyApp01“。 2、选择MFC AppWizardexe 选项,除STEP 1选 择单文档外其他STEP缺省。 8 8最简单的MFC例子 ”Hello,World”3、在Class View选择CMyApp01View类的 OnDraw()成员函数双击会在C+编译器看 到以下内容: void CMyApp01View:OnDraw(CDC* pDC) CMyApp01Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here 9 9最简单的MFC例子 ”Hello,World” 在 / TODO: add draw code for native data here的位置增加一行代码 void CMyApp01View:OnDraw(CDC* pDC) CMyApp01Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC-TextOut(10,10,“ Hello,WorldHello,World “); /增加的一行 / TODO: add draw code for native data here 1010MFC程序中的元素 WinMain函数:并非不存在只是已经被隐藏 在应用程序框架内部。 CMyApp类:CMyApp类的对象代表一个应用程序,CWinApp基类决定它的大部分行为。 应用程序的启动:当开始运行应用程序时 WINDOWS会调用WinMain函数,WinMain会 查找该应用程序的全局对象theApp。 CMyApp:InitInstance成员函数: 发现theApp后自动调用重载的虚函数 InitInstance来完成主窗口的构造和显示工作。 1111MFC程序中的元素 CWinApp:Run成员函数:WinMain在调用 InitInstance之后紧接着调用Run函数,它被 隐藏在基类中负责传递应用程序的消息给相 映的窗口。 CMyFrame类:此类的对象代表着应用程序 的主窗口。它的构造函数调用基类CFrameWnd 的Create函数创建具体的窗口结构。 CMyFrame:OnLButtonDown函数:演示消息 处理机制,当鼠标坐键被按下这一事件被映射 到CMyFrame的OnLButtonDown函数上,如果 你选择F5进行编译运行的话可以在调试窗口看 到TRACE宏显示的信息 1212MFC程序中的元素 CMyFrame:OnPaint函数:应用程序每次重新 绘制窗口都需要调用此函数,将显示 “Hello World!”放在这里是因为每次窗口发生变化 时保证“Hello World!“被显示,你可以试着将语句:CPaintDC dc(this); dc.TextOut (0,0,“Hello World!“); 写在别出,例如写在 void CMyFrame:OnLButtonDown (UINT nFlags,CPoint point) TRACE(“Entering CMyFrame:OnLButtonDown - %lx,%d,%dn“, (long)nFlags,point.x ,point.y); CPaintDC dc(this); dc.TextOut (0,0,“Hello World!“); 1313MFC程序中的元素 运行后当点击左键时显示“Hello World!”, 但当窗口最小化再最大化时“Hello World!“不见了。 关闭应用程序:用户关闭应用程序时会有一 系列事件发生。首先CMyFrame对象被删除, 然后退出Run,进而退出WinMain,最后 删除CMyApp对象。 上面的示例可见程序的大部分功能包含在基类CWinApp和 CFrameWnd中,我们只写了很少的函数,便可以完成很复杂 的功能。所以应用程序框架不仅仅是一种类库,它还定义了应 用程序的结构,除了基类外还包括WinMain函数,以及用来支 持消息处理、诊断、DLL、等都包含在应用程序框架中。 1414MFC的消息映射 MFC是通过一些宏来将特定的消息影射到派生类 相应的成员函数上,这种体制的好处是允许某些 非窗口类(如文档类)来控制命令消息。 且不需要C+作任何扩展。 MFC的消息控制函数要求提供函数原形、函数体 以及消息映射中的入口。 用Class Wizard可以很容易的将上面内容加到 类中。例如只要在Class Wizard中添加 WM_LBUTTONDOWN消息,则相应的代码 便加在合适的地方。 1515MFC的消息映射 应用程序除了包含应用程序框架类外,一般 还要包含文档和视图类。 这种文档-视图结构是应用框架的核心。 文档好比后台的数据库,视图就是界面上显示 的内容,同一个数据库可以用不同的界面显示, 但由于所有的界面内容都是从数据库中数据得来 ,所以当数据库发生变化时所有的相关界面显示 都会跟着改变。 应用程序实际上就是通过视图对文档进行一系 列操作。 1616MFC 视图 视图是一个从CView类派生的类的对象, 在屏幕上显示的窗口就是一种。 对象的行为完全由类的成员函数和数据成员 决定,其中及包括派生类中的特定函数,也 包括基类的标准函数,所以有必要了解MFC 类库的结构以及各类的标准成员函数 。我们来回顾前面例子项目程序所在目录下 的相关文件: 1717MFC 视图 myapp01.dsp 项目文件 myapp01.dsw 工作空间文件 myapp01.rc 资源描述文件 myapp01View.cpp 包含CMyAppView 类成员函数的视图类实现文件 myapp01View.h 包含CMyAppView 类成员函数的视图类头文件 myapp01.opt 二进制文件,告诉 Developer Studio本项目的哪些文件是打开 的,又是如何排列的 1818MFC 视图 readme.txt 用来解释所产生的所有文件, 未列出的myapp01Doc.cpp、myapp01Doc.h、 StdAfx.cpp、StdAfx.h在这里都可以找到 相应解释。 resource.h 包含#define常量定义的头文件 CMyAppView类的OnDraw成员函数,它是虚函数, 作用是每当窗口需重绘时应用程序框架会调用它。 1919MFC 视图 在myapp01View.h可以找到OnDraw原型 : virtual void OnDraw(CDC* pDC); / overridden to draw this view 参数是CDC类的指针,WINDOWS是通过和 窗口相关联的设备环境(CDC类的对象就是 设备环境)和显示硬件进行通讯。 有了这个指针我们便可以调用CDC类的成员 函数来完成各种绘制工作 。如前面用到的TextOut(),还有一些如Ellipse()、 Polygon()、BitBlt()等 。2020MFC 资源文件 资源文件(就是以应用程序名和扩展名是.rc 的文件)很大程度上决定了应用程序的用户界面。 在VC+中资源文件包括以下内容: Accelerator -模拟菜单和工具栏的选择内容 Dialog -对话框的布局及内容 Icon - 图标有两种一种是16X16一种是32X32 Menu- 应用程序的主菜单及所属的弹出式菜单 String table -字符串不属于C+源代码部分 Toolbar -工具条 Version -程序的描述、版本号、支持语言信息 2121MFC 资源文件 以上信息都在.rc文件中包含,同时.rc文件 还包含了以下语句: #include “afxres.h” #include “afxres.rc” 它们的作用是把适合于所有应用程序的一 些通用MFC库资源包含进来。 需要注意的是虽然resource.h是一个ASCII码文件 可以用文本编辑器进行编辑,但如果使用文本编 辑器进行编辑的话,下次再使用资源编辑器时所 做的修改有可能丢失,所以我们应该在尽量在资 源编辑器中编辑应用程序的资源,新增的资源内 容会自动地添加在我们的程序相应位置。 2222MFC编译模式在VC+中有两种编译模式,一种是ReleaseBuild另一种是Debug Build。 它们之间的区别在于,Release Build不对源 代码进行调试,不考虑MFC的诊断宏,使用 的是MFC Release库,编译十对应用程序的 速度进行优化,而Debug Build则正好相反, 它允许对源代码进行调试,可以定义和使用 MFC的诊断宏,采用MFC Debug库,对
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号