工程软件基础基础-3课件_第1页
工程软件基础基础-3课件_第2页
工程软件基础基础-3课件_第3页
工程软件基础基础-3课件_第4页
工程软件基础基础-3课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、主讲主讲:李维诗:李维诗Email: 1工程软件技术基础工程软件技术基础仪器科学与光电工程学院工程软件技术基础工程软件技术基础第一章 导论第二章 面向对象技术第三章 VC+编译环境第四章 工程常用数据结构第五章 工程常用算法第六章 软件工程基础工程软件技术基础2工程软件技术基础工程软件技术基础第一章 导论第二章 面向对象技术第三章 VC+编译环境第四章 工程常用数据结构第五章 工程常用算法第六章 软件工程基础工程软件技术基础3第三章第三章 VC+VC+编译环境编译环境 Windows编程简介 VC+集成开发环境简介 MFC编程简介 消息映射 错误修改及调试工程软件技术基础4第三章第三章 VC+

2、VC+编译环境编译环境 Windows编程简介 VC+集成开发环境简介 MFC编程简介 消息映射 错误修改及调试工程软件技术基础5Windows编程机制编程机制 Windows是一个多进程的图形窗口操作系统,Windows应用程序与DOS应用程序有很大的区别: DOS应用程序采用顺序执行过程, Windows是一个基于事件的消息(Message)驱动系统。 Windows应用程序是按照“事件消息处理”非顺序的机制运行。 当有某个事件(如单击鼠标、键盘输入和执行菜单命令等)发生时,Windows会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队列; 应用程序从消息队列中取出消息,并根据

3、不同的消息进行不同的处理。 工程软件技术基础6WindowsWindows程序的基本结构程序的基本结构工程软件技术基础7开始执行初始化应用初始化和创建应用窗口进入消息循环并从消息队列得到一个消息当前消息是否“退出”?终止执行程序是否定义了对此消息的处理进行默认处理处理消息否否是是消息驱动Windows API Windows是个多作业系统,除了协调应用程序的执行、分配内存、管理系统资源等之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的。由于这些函数服务的对象是应用程序(Application),所

4、以便称之为Application Programming Interface,简称API 函数。 Windows API是微软对于Windows操作系统中可用的内核应用程序编程接口的称法。它也是应用软件与Windows系统最直接的交互方式。工程软件技术基础8Windows API Windows API是Windows操作系统与应用程序之间的标准接口,它提供了上千个标准函数、宏和数据结构的定义。 凡是在 Windows 工作环境底下执行的应用程序,都可以调用Windows API。Windows应用程序可通过调用标准Windows API函数使用系统提供的功能。 Windows API函数定义

5、在一些DLL动态链接库中,其中最主要的DLL是User32.dll、Gdi32.dll和Kernel32.dll三个库文件。 工程软件技术基础9Windows SDK SDK即software develope kit(软件开发工具包),它包含了进行Windows软件开发的文档和API函数的输入库、头文件(因为API在动态链接库中,这些动态链接库是系统的组成部分因此不用再提供,而输入库和头文件则必须,这样才能在你的程序中使用API函数)。 早期SDK是一个单独发放的包,现在在Visual C+和其他一些开发环境中已经包含了它。工程软件技术基础10如何对待如何对待Windows API &

6、; SDK 不必刻意去研究每一个函数的用法,那也是不现实的。 需要的时候查API帮助。 工程软件技术基础11第三章第三章 VC+VC+编译环境编译环境 Windows编程简介 VC+集成开发环境简介 MFC编程简介 消息映射 错误修改及调试工程软件技术基础12VCVC+集成集成开发环境简介开发环境简介 是Windows环境下最主要的应用开发系统之一 是C+语言的集成开发环境 强大的调试功能为大型复杂软件的开发提供了有效的排错手段 包含源代码编辑器、资源编辑器、C/C+编译器、链接器、调试器,以及一套联机文档。使用Developer Studio,可以完成创建、编辑、编译、调试、运行应用程序等的

7、各种操作。工程软件技术基础13启动启动VC+VC+工程软件技术基础14在在VCVC启动窗口中,取消启动窗口中,取消“Tip of the Day”Tip of the Day”单击,取消对勾单击,取消对勾单击,关闭对话框单击,关闭对话框 下次启动下次启动VC+VC+,就不会再出现,就不会再出现“Tip of the Day”Tip of the Day”对话框对话框开发环境开发环境开发环境是程序员同开发环境是程序员同VC+VC+的交互界面的交互界面创建工程文件创建工程文件编辑资源编辑资源编译、链接、调试编译、链接、调试编辑程序源代码编辑程序源代码17EditEdit菜单菜单FileFile菜单

8、菜单ViewView菜单菜单Insert菜单菜单菜单简介菜单简介18ProjectProject菜单菜单BuildBuild菜单菜单ToolsTools菜单菜单WindowsWindows菜单菜单菜单简介菜单简介File-New-ProjectsFile-New-ProjectsFile-New-ProjectsVCVC的代码生成器的代码生成器 VC提供两个主要的代码生成器: AppWizard 应用程序向导、ClassWizard类向导。 AppWizard生成应用程序框架:选择工程类型、工程创建的相关选项 ClassWizard用来创建事件回调函数,生成函数的框架。AppWizard只要程

9、序开始时用一次,而ClassWizard随着功能的增加会多次应用。工程软件技术基础21第三章第三章 VC+VC+编译环境编译环境 Windows编程简介 VC+集成开发环境简介 MFC编程简介 消息映射 错误修改及调试工程软件技术基础22MFCMFC是一个编程框架是一个编程框架 类库是一个可以在应用程序中使用的相互关联的C+类的集合。MFC作为一个Windows编程类库,它包含了200多个类,封装了Windows的大部分编程对象以及与它们有关的操作。 MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架。 Visual C+捆

10、绑了MFC,编程时利用类的可重用性和可扩充性,降低Windows应用程序设计的难度和工作量。工程软件技术基础23采用采用MFC编程的优点编程的优点 使用标准化的程序代码结构,有利于程序员之间的交流。 Visual C+为MFC提供了大量的工具支持,提高了编程效率。 MFC应用程序的效率较高,只比传统的Windows C程序低5%左右。并且,在MFC应用程序中还允许混合使用传统的Windows API函数。 其它优势:完全支持Windows所有的函数、控件、消息、菜单及对话框;具有良好的稳定性和可移植性,更符合微软的风格等。 工程软件技术基础24MFC体系结构体系结构 MFC主要组成部分:类、宏

11、和全局函数。 类是MFC中最主要的内容。MFC类是以层次结构方式组织起来的。MFC中的类分成两部分,除了一些辅助类,大多数的MFC类是直接或间接从根类CObject派生而来。 几乎每一个派生层次都与一具体的Windows实例相对应,如文档类、窗口类和视图类等。 MFC宏主要功能:消息映射、运行时对象类型服务、诊断服务、异常处理。 MFC约定:全局函数以“Afx”为前缀,全局变量以“afx”为前缀。工程软件技术基础25学习学习MFC的方法的方法 首先要对Windows编程概念和API函数有一定的了解,如Windows API有哪些功能和哪些常用的数据结构等。 学会抽象地把握问题,不求甚解,不要一

12、开始学习Visual C+就试图了解整个MFC类库。从理解和使用两个方面学习MFC,理解MFC应用程序的框架结构。 先大体上了解MFC的概念、组成和基本约定,从简单的类入手,结合程序设计,由浅入深,循序渐进、日积月累。 工程软件技术基础2627MFCMFC库库简介简介 类库是一个可以在应用程序中使用的相互关联的类的集合。 MFC库Microsoft 基本类库是一个Windows应用程序框架,它定义了应用程序的结构,并实现了标准的用户接口: 管理窗口、菜单、对话框,实现基本的输入/输出和数据存储。MFCMFC的类的类层次结构图层次结构图工程软件技术基础28CObjectCObject类类 由于M

13、FC中大部分类是从CObject类继承而来的,CObject类描述了几乎所有的MFC类的一些公共特性,CObject类为程序员提供了对象诊断、运行时类型识别和序列化等功能。 对象诊断。MFC提供了两种诊断特性:利用成员函数AssertValid()进行对象有效性检查,使得类可以在继续运行前对自己进行正确性检查;利用成员函数Dump()输出对象的数据成员的值。 运行时访问类的信息:提供GetRuntimeClass()和IskindOf()两个成员函数来支持运行时类型识别。 对象序列化。工程软件技术基础29CWinAppCWinApp类类 在MFC应用程序中,CWinApp类取代了WinMain

14、()主函数在SDK应用程序中的地位。传统SDK应用程序WinMain()函数完成的工作现在由类CWinApp的InitApplication()、InitInstance()和Run()三个成员函数承担。 在任何MFC应用程序中有且仅有一个CWinApp派生类的对象,它代表了程序中运行的主线程,也代表了应用程序本身。 工程软件技术基础30CWndCWnd类类 CWnd类类及其派生类的实例是一个窗口。CWnd类代表了MFC中最基本的GUI对象,它是一个功能最完善、成员函数最多的MFC类。 窗口的实例包括应用程序主窗口、对话框和控件等。 CWnd类提供的功能包括注册新窗口类、创建窗口及子窗口、获取

15、窗口、管理窗口、访问窗口及控件、控制窗口光标、创建和使用句柄和支持工具提示等。工程软件技术基础31CFrameWndCFrameWnd类类 CFrameWnd类是CWnd类的派生类,主要用来掌管一个窗口,它取代了SDK应用程序中窗口函数WndProc()的地位。 CFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。 CFrameWnd支持SDI界面,对于MDI界面,使用其两个派生类CMDIFrameWnd和CMDIChildWnd。 CFrameWnd提供了若干个成员函数用于获得和设置活动文档、视图、图文框、标题栏、状态栏等操作。工程软件技

16、术基础32CDocumentCDocument和和CViewCView类类 CDocument类在应用程序中作为用户文档类的基类,它代表了用户存储或打开的一个文件。CDocument类的主要功能是把对数据的处理从对用户的界面处理中分离出来,同时提供了一个与视图类交互的接口。 CDocument类支持标准的文件操作,如创建、打开和存储一个文档等。 CView类是MFC中一个很基本的类,它作为其它MFC视图类和用户视图派生类的基类。 工程软件技术基础33MFC宏宏 宏就是用预处理指令#define定义一个标识符,用它来表示一个字符串或一段源代码。 MFC宏作为MFC类库的一个组成部分在MFC应用程

17、序中经常出现。MFC宏在Afxwin.h、Afx.h及Afxmsg.h等MFC头文件中分别进行了定义。 MFC提供的宏有很多,常用的包括消息映射宏、运行时类型识别的宏、调试宏和异常宏等。 工程软件技术基础34MFCMFC的宏观框架体系的宏观框架体系 MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。 MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。 这些模板都采用了以文档-视图为中心的思想,每一个模板都包含一组特定的类。 消息映射机制工程软件技术

18、基础35SDISDI应用程序的构成应用程序的构成 主框架窗口 视窗口、工具条和状态栏 四个基本对象 CWinApp派生类CXXXApp:应用程序对象 CDocument派生类CXXXDoc:文档对象 CView派生类CXXXView:视对象 CMainFrame:主框架窗口对象工程软件技术基础36MFCMFC应用程序对象之间的关系应用程序对象之间的关系工程软件技术基础37 文档一视图文档一视图 结构结构 应用程序框架的核心是文档一视图结构。MFC通过文档一视图结构为应用程序提供一种将数据与视图相分离的存储方式。 文档类的作用是将应程序的数据保存在文档类对象中,以及从磁盘文件中读或向磁盘文件中写

19、数据。 视图类的作用是显示数据和编辑数据。工程软件技术基础38预编译头文件预编译头文件 头文件预编译 把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 预编译结果文件是projectname.pch。 编译器通过一个头文件stdafx.h来使用预编译头文件。 编译器认为,所有在指令#include stdafx.h前的代码都是预编译的,它跳过#include stdafx. h指令,使用projectname.pch编译这条指令之后的所有代码

20、。 因此,所有的CPP实现文件第一条语句都是:#include stdafx.h工程软件技术基础39第三章第三章 VC+VC+编译环境编译环境 Windows编程简介 VC+集成开发环境简介 MFC编程简介 消息映射 错误修改及调试工程软件技术基础40句柄句柄 Windows程序中产生的任何资源(如图标,光标,窗口,应用程序的实例等等),操作系统每产生一个这样的资源时,都要将它们放入相应的内存,并为这些内存指定一个唯一的标识号,即该资源的句柄。 操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源的。 句柄常作为Windows消息和API函数的参数,在采用API方法编写Windows应用

21、程序时要经常使用句柄。而采用MFC方法编写Windows应用程序时,由于对应的MFC类已对句柄进行了封装,大多数情况下不再需要访问句柄。工程软件技术基础41事件和消息事件和消息 事件是一个动作用户触发的动作。事件只能由用户通过外设的输入产生。 消息是一个信息传递给系统的信息。产生消息的来源有三个: 由操作系统产生; 由用户触发的事件转换而来; 由另一个消息产生。 事件与消息的本质不同:事件由用户(操作电脑的人)触发且只能由用户触发,操作系统能够感觉到由用户触发的事件,并将此事件转换为一个(特定的)消息发送到程序的消息队列中。工程软件技术基础42消息消息的描述格式的描述格式typedef str

22、uct tagMSGHWNDhWnd;/ 消息的目标窗口句柄UINTmessage;/ 消息的标识符WPARAMwParam;/ 32位消息附加参数LPARAMlParam;/ 32位消息附加参数DWORD time;/ 消息发至队列的时间POINTpt;/ 消息发出时的鼠标位置 MSG;工程软件技术基础43描述消息的主要描述消息的主要参数参数 hWnd:消息的目标窗口句柄,即消息的接收者。所谓句柄是一个特殊整数,作为 Windows 各类资源的索引,是访问资源的唯一依据。不同资源的句柄类型也不同:窗口句柄 HWND, 进程实例句柄 HINSTANCE, 光标句柄HCURSOR, 画笔句柄 H

23、PEN, 画刷句柄 HBRUSH, 设备环境句柄 HDC, 位图句柄 HBITMAP, 字体句柄 HFONT 等。 message:消息的标识符,即消息的名称。 wParam 和 lParam:消息的附加参数,即为消息的响应函数传递参数。工程软件技术基础44MFC消息映射机制消息映射机制 在每个能接收和处理消息的类中,定义一个静态对照表 消息映射表,该表中只需要包含所属类需要处理的消息和对应的消息处理函数的映射信息。进程只要搜索该表就可以完成: 判断能否响应所收到的消息; 如果能响应,立即找到相应的消息处理函数。 在类定义中用DECLARE_MESSAGE_MAP()宏来声明使用消息映射。 在

24、类的实现源文件中用BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏来定义消息映射。工程软件技术基础45常用映射宏及其语法常用映射宏及其语法消息类型消息类型宏格式宏格式参数参数标准Windows消息ON_WM_XXX无参数命令消息ON_COMMAND命令ID,处理函数名命令更新通知消息ON_UPDATE_COMMAND_UI命令ID,处理函数名控件通知消息ON_XXX控件ID,处理函数名用户自定义消息ON_MESSAGE自定义消息ID,处理函数名已注册Windows消息ON_REGISTERED_MESSAGE消息ID,处理函数名命令ID范围ON_COMMAND_RA

25、NGE起始命令ID,结束ID,处理函数名将更新的命令ID范围ON_UPDATE_COMMAND_UI_RANGE起始命令ID,结束ID,处理函数名控件ID范围ON_CONTROL_RANGE控件通知码,起始控件ID,结束ID,处理函数工程软件技术基础46消息映射例子消息映射例子在 AppWizard产生的应用程序类的头文件中包含: /AFX_MSG(CTttApp)afx_msg void OnAppAbout();/AFX_MSGDECLARE_MESSAGE_MAP()应用程序类的实现文件中包含:BEGIN_MESSAGE_MAP(CTApp, CWinApp)/AFX_MSG_MAP(CTttApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)/AFX_MSG_MAPEND_MESSAGE_MAP()头文件里是消息映射和消息处理函数的声明,实现文件里是消息映射的实现和消息处理函数的实现。它表示让应用程序对象处理命令消息 ID_APP_ABOUT,消息处理函数是OnAppAbout。工程软件技术基础47除了用户自定义消息,消息映射宏都是自动生成使用资源编辑器完善界面使用资源编辑器完善界面工程软件技术基础48使用使用ClassWizardClassWizard映射消息映射消息工程软件技术基础49 第三章第三

温馨提示

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

评论

0/150

提交评论