版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 Windows程序设计基础 勿在浮沙筑高楼,打好基础是关键,教学内容 2.1 Windows编程基础 2.2 MFC程序设计基础 2.3 应用程序框架 2.4 综合实例创建宾馆管理系统的框架 2.5 小结 思考与练习,2.1 Windows编程基础,2.1.1 Windows编程基本概念 1、窗口 窗口是Windows应用程序中一个非常重要的元素。一个Windows应用程序至少要有一个窗口,称为主窗口。 从用户的角度讲,窗口是屏幕上与一个应用程序相对应的矩形区域,是用户与应用程序之间的图形化的接口。每当用户打开一个应用程序时,应用程序就会创建并显示一个窗口;当用户操作窗口中的对象时,窗
2、口就会做出反映;关闭主窗口时就会终止应用程序的运行;通过选择应用程序窗口,就会选择与窗口对应的应用程序。 从程序员的角度讲,窗口是Windows应用程序的基本操作单元,是系统管理应用程序的基本单位,是应用程序与用户之间交互的接口。应用程序的运行过程就是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理和数据交换的过程。因此,编写应用程序就是要创建一个或多个窗口,管理多个窗口之间的数据处理与交换。,2.1 Windows编程基础,2.1.1 Windows编程基本概念 窗口的特性是由一个WNDCLASS结构体进行定义的。WNDCLASS定义如下: typedef struct tagWNDCL
3、ASS UINT style; /窗口风格 WNDPROC lpfnWndProc; /指向窗口处理函数的函数指针 int cbClsExtra; /窗口结构中的预留字节数 int cbWndExtra; /为其它创建窗口预留字节数 HINSTANCE hInstance; /注册该窗口类的实例句柄 HICON hIcon; /代表该窗口类的图标句柄 HCURSOR hCursor; / 该窗口客户区鼠标光标句柄 HBRUSH hbrBackGround; /该窗口背景颜色句柄 LPCSTR lpszMenuName; /指向窗口菜单名的字符指针 LPCSTR lpszClassName; /
4、指向窗口名的字符指针 WNDCLASS;,2.1 Windows编程基础,2.1.1 Windows编程基本概念 2、句柄 在Windows程序中,每产生一个资源(如图标、光标、窗口、应用程序的实例等),操作系统都要将它们放入相应的内存,并为这些内存指定一个唯一的标识号,这个标识号即该资源的句柄。 操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源的,句柄是系统用来唯一标识某个Windows对象的符号。句柄的数据类型在winnt.h中说明如下: typedef void * HANDLE; 从物理上看句柄是一个泛型(无类型)指针,但它不是指向一个Windows对象的存储首地址,而是指向
5、包含了使用该对象有关信息的一块内存单元。从逻辑上说它是一个代号,一个对象的代号。句柄所指向的内容是不能由句柄操作来改变的,只能由系统来改变。,2.1 Windows编程基础,2.1.1 Windows编程基本概念 3、消息和消息队列 Windows程序设计是面向事件的。在Windows环境下,应用程序启动后,系统等待用户在图形用户界面内的输入选择,如鼠标按键、键盘按键、窗口被创建、关闭、改变大小、移动等,在Windows看来,这些都是事件。只要有事件发生,系统即产生特定的消息,驱动相应的处理函数进行处理,因此Windows 应用程序也称为事件驱动程序。 消息描述了事件的类别,包含了相关信息,W
6、indows应用程序利用消息与系统及其它应用程序进行信息交换。 由于windows事件的发生是随机的,程序的执行先后顺序也无法预测,系统采用消息队列来存放事件发生的消息。每个Windows程序都有一个消息队列,该队列是一个先进先出的缓冲区,通常是一个某种变量类型的数组。,2.1 Windows编程基础,2.1.1 Windows编程基本概念 3、消息和消息队列 在winuser.h中,消息结构的定义如下: typedef struct tagMSG HWND hWnd; /指定消息发向的窗口句柄 UINTmessage;/标识消息的消息值 WPARAMwParam;/消息参数 LPARAMlP
7、aram;/消息参数 DWORDtime;/消息进入队列的时间 POINTpt;/消息进入队列时鼠标指针的屏幕坐标 MSG;,2.1 Windows编程基础,4、数据类型,2.1 Windows编程基础,2.1.2 Windows应用程序的结构 1、Windows应用程序的构成 构成Windows程序的基本元素包括程序代码、用户界面资源和动态链接库(dynamic-link library)库。 程序代码主要由可执行代码构成,Windows程序要求有两个函数:一个是WinMain。WinMain函数是应用程序的基础,Windows应用程序的入口函数。当Windows操作系统启动一个程序时,它调
8、用的就是该程序的WinMain函数。另一个是窗口处理函数WndProc,对来自系统的消息进行处理。 资源是应用程序能够使用的一类预定义工具,用户界面资源是应用程序定义的图形用户接口GUI(graphical user interface),如菜单、对话框、按钮等。,2.1 Windows编程基础,2.1.2 Windows应用程序的结构 2、Windows消息处理 (1) 当Windows应用程序开始执行时,操作系统在预定的入口WinMain与应用程序连接。 (2)应用程序创立一个或多个窗口,每个窗口(包括对话框)都有一个窗口过程函数,程序通过窗口接收用户的输入和决定窗口显示。 (3)各种输入
9、产生的消息首先进入系统队列,由系统根据产生消息的窗口将消息发至窗口所在应用程序的消息队列。 (4)程序的消息循环代码段检索从消息队列中来的消息,并把它们返回Windows系统,由系统发送到对应的窗口过程函数进行处理,对于程序未响应的消息,发送至缺省窗口过程函数进行处理。,2.1 Windows编程基础,2.1.3 Windows程序示例 为了帮助读者理解Windows编程的概念,下面编写一个简单的Windows应用程序。该程序创建一个窗口,并在该窗口响应鼠标和键盘消息。程序的实现步骤如下: WinMain函数的定义。 创建一个窗口。 进行消息循环。 编写窗口过程函数,2.2 MFC程序设计基础
10、,2.2.1 MFC类库的层次结构,2.2 MFC程序设计基础,2.2.2 MFC定义的宏、全局函数及全局变量 1. MFC提供的主要宏: 消息映射宏: 声明消息映射表宏DECLARE_MESSAGE_MAP、定义消息映射表宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP对、消息映射表入口宏ON_加消息名。 动态MFC对象宏: DECLARE_DYNCREATE和DECLARE_DYNAMIC,IMPLEMENT_DYNCREATE和IMPLEMENT_DYNAMIC 运行时类宏:RUNTIME_CLASS 序列化宏: DECLARE_SERIAL和IMPLEMENT_SE
11、RIAL 诊断服务宏:ASSERT、VERIFY 跟踪服务宏:TRACE 异常处理宏:THROW,2.2 MFC程序设计基础,2.2.2 MFC定义的宏、全局函数及全局变量 2. 全局函数 MFC提供一些不属于任何类的全局函数,函数名以Afx开头,可以被应用程序中的所有类和函数所调用。如: AfxAbort:无条件终止一个应用程序的执行; AfxGetAppName:返回指向应用程序名的字符串指针; AfxWinInit由WinMain调用,对MFC应用程序进行图形用户界面(GUI)的初始化等等。 AfxGetApp:返回指向应用程序的CWinApp对象的指针。,2.3 应用程序框架,2.3.
12、1 构架Windows应用程序框架 1、创建应用程序框架 使用Visual C+.NET的应用程序向导,生成一个名为AnalyzeMFC的VC+.NET项目。注意,我们这个例程中的应用程序的类型为“单文档”类型。 在项目AnalyzeMFC中,应用程序向导为用户生成了4个类,这些类所对应的头文件和源文件如表2-5所示。,2.3 应用程序框架,2.3.1 构架Windows应用程序框架 2、应用程序的执行过程,2.3 应用程序框架,2.3.2 文档和视图 1、文档与视图的概念: 文档(document)指的是数据组合的抽象,它通常对应磁盘文件,也可以对应I/O端口(包括打印机、键盘)或一块内存空
13、间(串流)。同样的数据,我们可以用不同的方式来表示。把纯的数据放在文件中或数据库中,而把显示方式分离出来,可以让一份数据有多种不同的显示方式,程序中的数据表现称为“视图” (view)。这样就可以分别考虑数据的保存文档,和数据的表现视图。 文档就是数据,CDocument就可以简单地理解为负责处理数据的类。在MFC编程时,我们应该把所有要处理的从外部获得的数据全部放在文档类及其派生类的对象中。CDocument类是一个预先编好的类,只是提供了一个外壳或者讲框架,程序员可以在Document中建立实际要用的数据格式及其管理方法。最常用的方法当然是派生出自己的文档类(CMyDocument类)。,
14、视图类(CView)负责与使用者接触。文档和视图是数据的两个方面:数据的处理在文档中进行,它使用的是字节、整数、浮点数等数据,链表、顺序表和树、图等数据结构。而数据的表现视图使用的是绘图工具:如绘图域、画笔、调色板等等。CView是为数据的表现而设计的。 CView负责程序与用户之间的交互。用户对数据的编辑、修改,对程序下达工作指令都要依赖窗口上的鼠标与键盘操作才能完成,这些信息由View接受后再传给Document。,2、文档/视图结构的使用: 文档视图结构提供一种连续处理数据的方式,使应用程序的数据与数据的显示分开处理。 数据储存在文档类中(即文档类中包含表示程序数据的成员),数据显示由视
15、图负责。视图是程序窗口的客户区,用户通过视图与程序交互,框架窗口是客户区的框架; 一个文档可以对应多个不同视图,如在Excel应用中,数据既可以以数值方式显示,也可以图形方式显示;而一个视图一般只对应一个文档。当文档数据发生变化时,视图显示的状态也会随之变化;对于多个视图的情况,基于同一文档的多个视图的显示同步变化。,2.3 应用程序框架,3、文档、视图和框架的关系,2.3 应用程序框架,2.3.3 消息映射机制 MFC应用程序与其它Windows应用程序一样,通过消息通知事件的发生,程序响应消息,程序的执行结果取决于对消息的响应方式。MFC引入消息映射(Message Map)机制,简化了但
16、增强了消息处理功能。 消息映射机制定义消息映射表,将消息与处理消息的函数联系在一起;当事件发生产生消息时,在程序中各个类的消息映射表中查找,当找到消息处理函数时,便将消息送至对应的消息处理函数进行处理。每个从CCmdTarget所派生的类都可以接收消息,都可以定义自己的消息映射表Message Map。,2.4 综合实例创建宾馆管理系统的框架,建立应用程序框架。 设置应用程序的标题为“领航宾馆管理系统v1.0”。 使应用程序的主窗口在桌面上居中显示。 改变窗口的背景颜色。,2.5 小结 本章介绍了Windows编程的基本概念,分析了Windows应用程序的结构,并在此基础上,介绍了微软基础类库MFC的基础知识和如何利用Visual C+.NET集成开发环境创建Windows应用程序框架,重点分析了应用程序框架中个个类的功能和结构以及MFC应用程序的执行过程,以便读者能够迅速了解应用程序框架,添加相应的代码来完成自己的程序。最后,通过一个综合实例说明了如何建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届团风县数学四年级第二学期期末质量检测试题(含答案解析)
- 2026年智能手机行业深度报告:技术创新与市场格局
- 2026年智能家电配件制造行业市场分析报告
- 2026年电子商务行业竞争格局报告及市场潜力分析
- 2026年便民服务行业市场分析报告
- 2026年电子病历系统在医疗机构中的应用效果评估报告
- 2026年制造业六西格玛与精益生产融合报告
- 2026年动漫产业内容变现模式研究报告
- 2026年环保包装材料市场分析报告
- 2026年AI直播技术在行业中的应用研究报告
- 2025年河南省省直机关公开遴选公务员考试笔试真题附答案
- 阵发性室上性心动过速的急救及护理措施分析
- 2027北京协和医院应届毕业生招聘(护理类)考试参考题库及答案解析
- 2026中国内河码头建设政策环境与区域发展机遇研究报告
- 2026 年消防宣传月消防安全知识学习课件
- 员工宿舍改造专项施工方案
- 2026-2030中国orc低温余热发电系统行业供需形势与营销策略研究报告
- 泛光照明施工方案安全措施
- 项目部管理人员安全教育培训
- 独立生活能力培养小学主题班会课件
- 动物医学专业职业生涯规划
评论
0/150
提交评论