软件开发与实践——概述.ppt_第1页
软件开发与实践——概述.ppt_第2页
软件开发与实践——概述.ppt_第3页
软件开发与实践——概述.ppt_第4页
软件开发与实践——概述.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件开发与实践 长春理工大学 韩成 计算科学技术学院 Email: 办公室电话:85583332 考试成绩 平时成绩(30) 期末考试成绩(70) 考试方式 平时成绩:平时出勤情况 课堂测验情况 实验课成绩 考试成绩:期末考试 概 述 软件开发与实践 基本内容 v什么是MFC vMFC程序运行过程 vMFC类概述 vMFC的消息映射机制 v学习MFC的方法 一、什么是MFC lWindows操作系统采用了图形用户界面,借 助于它提供的API(Application Programming Interface)函数,用户可以编出具有漂亮图 形界面的程序。 lVC+的微软基础类库(Microsoft Foundation Class Library,MFC)封装了大部 分API函数,并提供了一个应用程序框架,简 化和标准化了Windows程序设计。 一、什么是MFC 1、应用程序框架 MFC是一种称为应用程序框架的软件的组成 部分。要理解应用程序框架,就要回顾一下用C语 言编写Windows应用程序的全过程。 首先要编写一个含有WinMain()的源代码模块 ,还要编写初始化应用程序的代码,接下来是消 息循环,其次是注册窗口类(使用 RegisterClass())。 在应用程序中,要创建一个大的switch语句 ,其中的case语句来对应每个要处理的消息。 所以在这些基本程序中要花费大量的时间, 还要记住很多规则。例如使用CreateBitmap()创 建一个位图,用DeleteObject()来取消它,而且 必须保证WM_PAINT代码中成对地使用 BeginPaint()和EndPaint()从而不至于使 Windows出现混乱。 上述这些工作,正是应用程序框架要做的事 情。使用它,将避免每次都去重新编写重复的代 码。 lMFC主要组成部分:类、宏和全局函数。 l类是MFC中最主要的内容。MFC类是以层次结构 方式组织起来的。MFC中的类分成两部分,除 了一些辅助类,大多数的MFC类是直接或间接 从根类CObject派生而来。 l几乎每一个派生层次都与一具体的Windows实 例相对应,如文档类、窗口类和视图类等。 lMFC宏主要功能:消息映射、运行时对象类型 服务、诊断服务、异常处理。 lMFC约定:全局函数以“Afx”为前缀,全局变 量以“afx”为前缀。 2、MFC体系结构 l面向对象的windows编程接口 繁琐的windows API编程 面向对象的MFC编程 l“站在巨人肩膀上”编程 标准化的应用程序框架(Application Framework) 3、MFC的主要作用 举例:一个简单的应用程序 创建过程 : 在Visual C+ 6.0的启动界面中,选择“FileNew” ,在弹出的“New”对话框中单击“Projects”选项卡 。 选择“MFC AppWizard(exe)”,在“Location”编辑 框中输入要建立的工程所在的目录 。 在右上方的“Project name”编辑框中输入工程名称 Eg2_1,单击OK按钮,弹出MFC AppWizard 向导对话框 。 在第一步中选择Single document,建立一个单文档界 面应用程序SDI。 取其默认值,直到第六步结束。 二、MFC程序运行过程 l初始化全局变量 l入口函数 l得到应用程序对象指针 l全局初始化函数 l应用程序初始化 l生成并显示窗口 l消息循环 三、MFC类概述 MFC约有200个类,提供了Windows应用程序框 架和创建应用程序的组件。其中只有5个核心类对 应用程序框架有影响: CWinApp,CDocument,CView,CFrameWnd 和CDocTemplate。 五个之中只有CWinApp是必不可少的类, CWinApp的对象在应用程序中必须有一个,也只有 一个,并是一个全局对象,它建立了应用程序执 行的主线程。 三、MFC类概述 MFC是采用单一继承,从根类Cobject层层派 生出绝大多数MFC中的类,其层次结构是最典型 。参见下图 四、MFC消息处理机制 MFC消息映射机制 l将消息与消息处理函数联系起来,形成一一对 应的机制。 l消息映射宏 声明: DECLARE_MESSAGE_MAP 定义: BEGIN_MESSAGE_MAP ON_COMMAND ON_CONTROL ON_MESSAGE END_MESSAGE_MAP Windows的三类消息 窗口消息窗口消息( (WM_XXX)WM_XXX) 只能由窗口或视图对象处理,即派生自只能由窗口或视图对象处理,即派生自CWndCWnd 命令消息命令消息( (WM_COMMANDWM_COMMAND) ) 由由CCmdTargetCCmdTarget派生的类都能处理该消息派生的类都能处理该消息 控件通知消息控件通知消息 由控件向其父窗口发送由控件向其父窗口发送WM_COMMANDWM_COMMAND消息消息 宏名称对应消息消息处理函数 ON_WM_CHAR WM_CHAR OnChar ON_WM_CLOSE WM_CLOSE OnClose ON_WM_CREATE WM_CREATE OnCreate ON_WM_DESTROY WM_DESTROY OnDestroy ON_WM_LBUTTONDOWN WM_LBUTTONDOWN OnLButtonDown ON_WM_LBUTTONUP WM_LBUTTONUP OnLButtonUp ON_WM_MOUSEMOVE WM_MOUSEMOVE OnMouseMove ON_WM_PAINT WM_PAINT OnPaint . 窗口消息: 命令消息(WM_COMMAND): 对应规则:ON_COMMAND( , ) 例如: ON_COMMAND(ID_ABOUT, OnAbout) ON_COMMAND(ID_FILE_NEW, OnFileNew) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_SAVE, OnFileSave) 命令消息的来源主要有:菜单、工具栏和加速键 控件宏名称 消息处理函数 Button ON_BN_CLICKED(,) memberFxn ComboBox ON_CBN_DBLCLK(,) memberFxn Edit ON_EN_SETFOCUS(,) memberFxn ListBox ON_LBN_DBLCLK(,) memberFxn 控件通知消息: 一个完整的消息处理过程 l在类定义中加入消息处理函数的函数声明 l在类的消息映射表中加入相应的消息映射入口 项 l在类的实现中加入消息处理函数的函数体 注:整个过程可以借助于ClassWizard对话框 处理自定义消息 l首先确定用户自定义消息的值。 #define WM_USER_MSG1 (WM_USER+100) l在类定义中加入消息处理函数的函数声明 l使用ON_MESSAGE宏在类的消息映射表中加入相应 的消息映射入口项 l在类的实现中加入消息处理函数的函数体 SendMessage()和PostMessage() nSendMessage() 直接将消息发给消息处理函数,并等待消息直接将消息发给消息处理函数,并等待消息 处理函数运行完成并返回一个结果后,应用处理函数运行完成并返回一个结果后,应用 程序才能继续执行。程序才能继续执行。 nPostMessage() 将消息发送到拥有那个窗口的应用程序消息将消息发送到拥有那个窗口的应用程序消息 队列中,并立即返回。队列中,并立即返回。 一个画线例子 例:在视图窗口中用鼠标画线? 分析: 1、按下鼠标左键时记录直线起点位置的代码。 2、释放鼠标左键时记录鼠标按钮释放时的位 置,并在起点和终点间画线。 v首先要对Windows编程概念和API函数有一定的 了解,如Windows API有哪些功能和哪些常用的 数据结构等。 v学会抽象地把握问题,不求甚解,不要一开始学 习Visual C+就试图了解整个MFC类库。从理解 和使用两个方面学习MFC,理解MFC应用程序的 框架结构。 v先大体上了解MFC的概念、组成和基本约定,从 简单的类入手,结合程序设计,由浅入深,循序 渐进、日积

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论