MFC应用程序基础.ppt

上传人:牧羊曲112 文档编号:6512442 上传时间:2023-11-08 格式:PPT 页数:62 大小:1,013.01KB
返回 下载 相关 举报
MFC应用程序基础.ppt_第1页
第1页 / 共62页
MFC应用程序基础.ppt_第2页
第2页 / 共62页
MFC应用程序基础.ppt_第3页
第3页 / 共62页
MFC应用程序基础.ppt_第4页
第4页 / 共62页
MFC应用程序基础.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《MFC应用程序基础.ppt》由会员分享,可在线阅读,更多相关《MFC应用程序基础.ppt(62页珍藏版)》请在三一办公上搜索。

1、高级语言程序设计-2,谭火彬,高级语言程序设计-2,-2-,Windows程序设计思路,Windows编程思路:1.设计窗体,接收用户输入 2.编写消息处理函数,并将这些函数与相应的控件关联,窗口消息处理列表:1.窗体创建 2.窗体关闭 3.窗体移动 4.鼠标单击按钮 5.编辑框中输入文本 6.选择列表框,高级语言程序设计-2,-3-,几个问题?,如何设计窗体和窗体中的控件?程序中如何操作窗体、控件?如何将用户操作与消息处理函数关联?如何编写消息处理函数响应用户的操作?,MFC即是封装这种处理机制的框架库,资源编辑器,资源,消息映射机制,函数,第11章MFC应用程序基础,高级语言程序设计-2,

2、-5-,内容安排,MFC概述MFC类库基础MFC对话框应用MFC文档视结构.Net环境介绍,高级语言程序设计-2,-6-,内容安排,MFC概述MFC类库基础MFC对话框应用MFC文档视结构.Net环境介绍,高级语言程序设计-2,-7-,MFC概述,MFC是一个编程框架MFC封装了Win32 SDK中的结构、功能,为编程者提供了一个应用程序框架该框架为编程者完成了很多Windows编程中的例行性工作,如管理窗口、菜单和对话框,执行基本的输入和输出、使用集合类来保存数据对象等等MFC框架定义了应用程序轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填

3、入这个轮廓Visual C+提供相应工具完成MFC初始化工作AppWizard可以生成初步框架文件(代码和资源等)资源编辑器用于帮助直观地设计用户接口ClassWizard用来协助添加代码到框架文件,高级语言程序设计-2,-8-,MFC发展-1,AFX(application framework)小组,Microsoft早先创建面向对象应用程序框架的尝试在许多方面改造了Windows,使用了完全不同的窗口和图形子系统,全新的AFX是面向对象API,提供Windows API高度抽象(不与Windows API兼容)扩展C+类,封装、映象Windows API,且为面向对象Windows应用程序

4、提供坚实的基础MFCAFX小组拿出全部AFX代码,大量AFX代码(作为基本框架)被移植到MFC内部,至今仍在MFC内。但是大部分AFX代码被废弃同时,MFC小组编写了集成开发环境Visual Studio以支持MFC,高级语言程序设计-2,-9-,MFC发展-2,MFC的演变1992.3 MFC1.0和Microsoft C/C+7.0同时推出:16位,无doc/view结构,存在CObject和MFC保留类CArchive1993.2 MFC2.0和VC1.0同时推出16位,引入doc/view结构 支持OLE1.0,引入消息映射,引入公用对话框1993.7 MFC(32位)1.0版本随同N

5、T3.1同时推出1993.8 MFC2.1和VC(32位)同时推出1993.12 最后的16位VC1994.9 VC+2.0和32位MFC3.0推出,高级语言程序设计-2,-10-,MFC编程体现面向对象特点,封装对Win32应用程序编程接口的封装对应用程序概念的封装对其它特性的封装,如COM/OLE、ODBC继承MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础:CObject、CCmdTarget多态通过虚拟函数和消息映射,MFC类提供了丰富的编程接口程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程

6、序的代码,高级语言程序设计-2,-11-,高级语言程序设计-2,-12-,内容安排,MFC概述MFC类库基础MFC对话框应用MFC文档视结构.Net环境介绍,高级语言程序设计-2,-13-,MFC类层次结构,基本类库可分为两种CObject派生类非CObject派生类,高级语言程序设计-2,-14-,CObject继承层次,CObject,应用程序结构,窗口支持,对话框,视图,控件,框架窗口,屏显,图形服务,控件支持,图形对象,菜单,同步对象,数组,列表,映射,文件服务,Windows插件,高级语言程序设计-2,-15-,CObject主要子类,CObject,CCmdTarget,CWinT

7、hread,CDocument,CWnd,CFrameWnd,CMDIChildWnd,CWinApp,CView,CDialog,CMIDFrameWnd,CMiniFrameWnd,MFC提供的绝大多数类的基类,该类完成动态空间的分配与回收,支持一切诊断、出错信息处理和文档序列化,主要负责将系统事件(消息)和窗口事件(消息)发送给响应这些事件的对象,完成消息发送、等待和派遣(调度)等工作,实现应用程序的对象之间的协调运行,应用程序的主线程类,是从CWinThread类派生而来的,用来完成对线程的控制,包括线程的创建、运行、终止和挂起等,文档类,包括了应用程序在运行期间所用到的数据,通用窗口

8、类,用来提供Windows中的所有通用特性、对话框和控件,实现标准的框架应用程序,控制对话框窗口,高级语言程序设计-2,-16-,第一个MFC程序:应用程序类,#include class CHelloApp:public CWinApppublic:virtual BOOL InitInstance();BOOL CHelloApp:InitInstance()m_pMainWnd=new CMainFrame();m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();return TRUE;CHelloApp theApp;

9、,高级语言程序设计-2,-17-,主框架类,class CMainFrame:public CFrameWndpublic:CMainFrame()Create(NULL,My Window,WS_OVERLAPPEDWINDOW,CRect(0,0,400,300);protected:afx_msg void OnLButtonDown(UINT nFlags,CPoint point);DECLARE_MESSAGE_MAP();BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_LBUTTONDOWN()END_MESSAGE_MAP()void

10、CMainFrame:OnLButtonDown(UINT nFlags,CPoint point)MessageBox(Hello World,Welcome to Visual C+!,Welcome,0);CFrameWnd:OnLButtonDown(nFlags,point);,高级语言程序设计-2,-18-,分析MFC应用程序,MFC应用程序特点没有主函数WinMainCWinApp代表整个应用程序类所有的应用程序都需要从该类中派生出一个具体的代表当前应用程序的类CWinApp:InitInstance()代表应用程序入口窗口消息处理从CFrameWnd中派生窗口框架类不再需要明确

11、定义窗口处理函数每个消息处理函数,定义成该窗口类的成员函数利用宏机制完成消息映射,高级语言程序设计-2,-19-,Program Entry Point,WinMain()Initialize AppInitialize InstancePump Message,CWinApp:InitApplication()Initialize App,CWinApp:InitInstance()Initialize Instance,CWinApp:Run()Pump Message,CWinApp:ExitInstace(),Quit?,MFC应用程序结构,高级语言程序设计-2,-20-,Visual

12、 Studio Wizard工具,为了将MFC类恰当地运用于应用程序,Developer Studio(开发平台)提供了几种向导(Wizard)工具和编辑器工具:AppWizard 用于生成应用程序所需要的基本类文件。所产生的类都派生于MFC类,它们在编译后与MFC库链接以创建应用程序Class Wizard 用于创建应用程序额外的文件或者为已有的类增加新的成员函数。这些被创建的类可以由MFC派生Resource Editor用于编辑各类资源:Dialog Editor 用于创建对话框模板Toolbar Editor 用于创建工具栏和位图资源Cursor、Icon和Bitmap Editor

13、是简单的图像编辑器,用于创建应用所使用的光标、图标和位图资源Menu Editor 用于创建应用中的菜单条和弹出菜单资源String Editor 用于创建字串资源Text Editor 用于编辑类文件,高级语言程序设计-2,-21-,MFC AppWizard,高级语言程序设计-2,-22-,MFC ClassWizard-消息映射,高级语言程序设计-2,-23-,MFC ClassWizard-数据交换,高级语言程序设计-2,-24-,MFC应用程序类型,基于对话框的应用程序MFC文档视结构单文档应用程序多文档应用程序,高级语言程序设计-2,-25-,内容安排,MFC概述MFC类库基础MF

14、C对话框应用MFC文档视结构.Net环境介绍,高级语言程序设计-2,-26-,基于对话框的应用程序,高级语言程序设计-2,-27-,对话框中常用Windows控件,高级语言程序设计-2,-28-,关于控件,控件(Control)是独立的小部件,在对话框与用户的交互过程中,控件担任着主要角色 控件实际上都是窗口,所有的控件类都是CWnd类的派生类控件通常是作为对话框的子窗口而创建的,控件也可以出现在视窗口,工具条和状态条中,高级语言程序设计-2,-29-,对话框模板设计,高级语言程序设计-2,-30-,对话框界面设计基础,添加新的对话框资源Insert Resource:Dialog改变对话框的

15、属性View PropertiesAlt+EnterPop Menu,Properties向对话框中添加控件修改控件的属性,高级语言程序设计-2,-31-,对话框界面设计基础,添加新的对话框资源Insert Resource:Dialog改变对话框的属性View PropertiesAlt+EnterPop Menu,Properties向对话框中添加控件修改控件的属性,高级语言程序设计-2,-32-,对话框类的设计-1,创建对话框类通过ClassWizard为对话框创建一个相应的类View ClassWizardCtrl+W启动ClassWizard之后,ClassWizard一旦发现新的对

16、话框资源,则会询问是否要为该对话框创建一个对话框类,按OK键确认指定对话框资源对应的对话框类名,和相应的文件名,高级语言程序设计-2,-33-,对话框类的设计-2,为对话框类加入成员变量-1对话框的主要功能是输出和输入数据对话框需要有一组成员变量来存储数据在对话框中,控件用来表示或输入数据,因此,存储数据的成员变量应该与控件相对应与控件对应的成员变量即可以是一个数据(Value),也可以是一个控件对象(Control):可以为一个编辑框控件指定一个数据变量,这样就可以很方便地取得或设置编辑框控件所代表的数据如果想对编辑框控件进行控制,则应该为编辑框指定一个CEdit对象,通过CEdit对象,程

17、序员可以控制控件的行为不同类的控件对应的数据变量的类型往往是不一样的,而且一个控件对应的数据变量的类型也可能有多种,高级语言程序设计-2,-34-,对话框类的设计-3,为对话框类加入成员变量-2利用ClassWizard可以很方便地为对话框类添加成员变量ClassWizard Member Variables,高级语言程序设计-2,-35-,对话框类的设计-4,对话框的初始化WM_INITDIALOG消息,对话框已初步创建,对话框的窗口句柄也已有效,但对话框还未被显示出来对话框对该消息的处理函数是OnInitDialog数据成员的初始化是由ClassWizard自动完成的,高级语言程序设计-2

18、,-36-,对话框类的设计-5,数据交换技术对话框的数据成员变量存储了与控件相对应的数据。数据变量需要和控件交换数据,以完成输入或输出功能例如,一个编辑框即可以用来输入,也可以用来输出:用作输入时,用户在其中输入了字符后,对应的数据成员应该更新;用作输出时,应及时刷新编辑框的内容以反映相应数据成员的变化。对话框需要一种机制来实现这种数据交换功能,这对对话框来说是至关重要的MFC提供了类CDataExchange来实现对话框类与控件之间的数据交换(DDX),该类还提供了数据有效机制(DDV)。数据交换和数据有效机制适用于编辑框、检查框、单选按钮、列表框和组合框数据交换的工作由CDialog:Do

19、DataExchange来完成,高级语言程序设计-2,-37-,对话框类的设计-6,DoDataExchange只有一个参数,即一个CDataExchange对象的指针pDX。在该函数中调用了DDX函数来完成数据交换,调用DDV函数来进行数据有效检查当程序需要交换数据时,不要直接调用DoDataExchange函数,而应该调用CWnd:UpdateData(bool)UpdataData函数内部调用了DoDataExchange。该函数只有一个布尔型参数,它决定了数据传送的方向调用UpdateData(TRUE)将数据从对话框的控件中传送到对应的数据成员中调用UpdateData(FALSE)

20、则将数据从数据成员中传送给对应的控件在缺省的CDialog:OnInitDialog中调用了UpdateData(FALSE),这样,在对话框创建时,数据成员的初值就会反映到相应的控件上,高级语言程序设计-2,-38-,Name,Phone,Ok,Cancel,ID=IDD_MY_DIALOGIDC_NAMEIDC_PHONEIDOKIDCANCEL,对话框中的数据初始化和取出CMyDialog dlg;If(dlg.DoModal()=IDOK)/取出name和Phone中数据,方法一:(1)在CMyDialog中增加:CString m_strname,m_strphone;(2)对话框显

21、示前初始化:BOOL CMyDialog:OnInitDialog()CDialog:OnInitDialog();SetDlgItemText(IDC_NAME,m_strname);SetDlgItemText(IDC_PHONE,m_strphone);return TRUE;(3)从对话框控件中读取数据 if(dlg.DoModal()=IDOK)strname=dlg.m_strname;strphone=dlg.m_strphone;/.,方法二:MFC提供对话框数据交换机制(DDX)(1)给对话框控件添加相应的成员变量(2)覆盖虚函数CDialog:DoDataExchange(

22、),利用该函数实现对话框控件和数据成员之间的数据传送。(3)在创建对话框时,CDialog:OnInitDialog();调用UpdateData(FALSE)数据成员 控件在取出控件数据之前,调用UpdateData(TRUE)数据成员 控件,对话框数据交换和数据校验,高级语言程序设计-2,-39-,对话框类的设计-7,消息映射,添加用户代码利用ClassWizard添加相应的消息处理入口ClassWizard Message Maps,高级语言程序设计-2,-40-,内容安排,MFC概述MFC类库基础MFC对话框应用MFC文档视结构.Net环境介绍,高级语言程序设计-2,-41-,MFC文

23、档视图结构,MFC的文档/视图(Doc/View)架构管理一个单独的数据类型与该数据的多种应用之间的关系文档即为数据源,数据源有很多种,最常见的是磁盘文件,但它不必是一个磁盘文件,文档的数据源也可以来自串行口、网络或摄像机输入信号等视图是数据的用户窗口,为用户提供了文档的可视的数据显示,它把文档的部分或全部内容在窗口中显示出来,高级语言程序设计-2,-42-,文档和视图间的关系,MFC的文档/视结构机制把数据同它的显示以及用户对数据的操作分离开来:所有对数据的修改由文档对象来完成视图调用文档对象的方法来访问和更新数据所有数据的显示由视图对象来完成文档调用视图对象来向用户展现数据,高级语言程序设

24、计-2,-43-,文档/视图结构类型,有两种类型的文档视结构程序单文档界面(SDI)应用程序用户在同一时刻只能操作一个文档在这些应用程序中,打开文档时会自动关闭当前打开的活动文档,若文档修改后尚未保存,会提示是否保存所做的修改多文档界面(MDI)应用程序允许同时操作多个文档可以打开多个文件,也可以通过切换活动窗口激活相应的文档进行编辑,高级语言程序设计-2,-44-,构建第一个文档视图程序,利用AppWizard生成一个单文档的应用程序DocViewDemo功能接收用户的键盘输入,显示在界面上讲解重点程序运行机制,高级语言程序设计-2,-45-,文档/视图程序组成,文档CDocument、CO

25、leDocument视图CView、CScrollBar、CFormView、CEditView框架窗体CFrameWnd、CMDIFrameWnd、CMDIChildWnd文档模板CSingleDocTemplate、CMultiDocTemplate应用程序对象CWinApp,高级语言程序设计-2,-46-,文档/视图对象的关系,一个运行的程序包括什么?文档、与文档关联的视图、包含视图的框架窗口文档中有该文档的视图列表,以及一个指针指向创建该文档的文档模板视图中有一个指向文档的指针,它是一个父框架窗体的一个子窗口文档框架窗口有一个指向当前活动视图的指针文档模板有其已打开文档的一个列表应用程

26、序中有文档模板的一个列表,高级语言程序设计-2,-47-,访问各类对象,高级语言程序设计-2,-48-,Doc/View中对象的创建,高级语言程序设计-2,-49-,内容安排,MFC概述MFC类库基础MFC对话框应用MFC文档视结构.Net环境介绍,高级语言程序设计-2,-50-,.Net解决方案,2000年6月22日,微软发布了.Net计划.Net是一种面向网络、支持各种用户终端的开发平台环境在.Net平台上,不同网站之间通过相关的协定联系在一起,网站之间形成自动交流,协同工作,提供最全面的服务,高级语言程序设计-2,-51-,.Net平台,高级语言程序设计-2,-52-,.Net框架,操作

27、系统,公共语言运行库,.NET 框架类库,ADO.NET、Windows 窗体、ASP.NET、全球化、安全性,编程语言,高级语言程序设计-2,-53-,.NET 框架 的工作流程,高级语言程序设计-2,-54-,Visual Studio.Net,Visual Studio.NET 2003支持C#、C+、Basic、ASP等语言支持.NET Framework 1.1支持.NET Compact Framework 1.0新增 J#语言支持 Windows Server 2003,高级语言程序设计-2,-55-,Visual Studio.NET功能和特点,设计,开发,调试,部署,高级语言

28、程序设计-2,-56-,Visual Studio.Net项目结构,解决方案一个容器,用来存放创建应用程序的项目文件和解决方案的内容一个解决方案通常包含一个或几个相关联的项目项目解决方案内的容器,用来对其组成部分进行编译、调试以及进行逻辑上的管理,高级语言程序设计-2,-57-,应用程序向导,高级语言程序设计-2,-58-,Windows 窗体设计器,高级语言程序设计-2,-59-,Visual C+.Net,Visual C+.Net支持多种风格的C+应用程序MFCATL标准 C+.NET 托管代码,高级语言程序设计-2,-60-,上机实验8,实验要求:了解Windows编程思想,利用VC编

29、写简单的MFC应用程序实验内容1.建立一个简单的Win32程序,显示一个空白窗体,单击鼠标左键时显示“Hello World”对象框,单击右键时退出窗体2.手工编写基于MFC框架的应用程序(参见课件p16-p17)3.建立一个基于对话框的应用程序,实现简单的计算器功能(两个数的四则运算),界面参见下页4.考虑将工资管理系统转换为Windows程序,高级语言程序设计-2,-61-,计算器程序操作界面,高级语言程序设计-2,-62-,上机实验8实验安排,要求考虑作业难度,本次作业不要求提前完成,课堂上会指导大家一步一步完成作业内容不需要提交,课堂上抽查上机安排(主303机房),分两组352114-352116班,8:00-10:00352111-352113班,10:00-12:00,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号