




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第3讲 Windows应用程序 GUI程序,Visual C+ 程序设计,主讲:李贵荣 湖北汽车工业学院,2,本讲内容,1 Windows操作系统简介 2 Windows编程基础知识 3 Windows消息 4 Windows中的消息处理机制(事件驱动) 5 Windows程序的基本结构 6 应用举例,3,Windows操作系统简介,Windows操作系统的发展 1983年12月首次推出Windows系统的第一个版本的,命名为Windows v1.0 1985年推出了Windows v1.1版本 1987年10月,Microsoft发行了Windows系统的另一个重要版本Windows v2.0 1990年5月,Microsoft公司发行了一个划时代的版本Windows v3.0 1992年4月,Microsoft公司又推出了支持象动态数据交换、对象连接和嵌入、多媒体等功能的Windows v3.1版本,4,Windows操作系统简介,Windows操作系统的发展 1995年,Microsoft公司隆重推出了Windows 95 1998年,Microsoft公司推出了Windows 98版本 1999年12月,微软公司发行32位图形商业性质的Windows 2000操作系统,基于NT技术,Windows NT系列是纯32位操作系统,使用先进的NT核心技术,非常稳定。 2000年9月,微软公司发行Windows ME是一个16位/32位混合的Windows系统。 2001年8月,Windows XP是基于Windows 2000代码的产品,同时拥有一个新的用户图形界面。,5,Windows操作系统的特点,图形化的用户界面Windows系统及Windows应用程序的用户可以得到一致的用户界面所带来的许多认识的方便。 多任务机制Windows向用户提供非常重要的多任务功能。 硬件即插即用功能Windows提供了各种设备驱动程序支持各种各样的外部设备。 与设备无关的图形图像机制,6,Windows编程基础,Windows界面,Win32操作系统为我们提供了一组预先构造好的界面元素或控件来建立GUI外观和作用相像的应用程序。这种方法使用户熟悉Windows 应用,并使用户能较容易地把操作技术的有关知识从熟悉的软件应用传递到新的不熟悉的软件应用中。 我们通过编程还可以自定义控件及其式样,给界面设计人员提供创作空间。,7,Windows编程基础,Windows是一种基于图形界面的多任务操作系统。基于Windows的程序有着相同的外观和命令结构。对用户 来说,学习使用Windows应用程序变得容易了。 Windows运行应用程序以硬件无关的方式来处理视频显示、键盘、鼠标、打印机、串行口以及系统时钟。尤其是标准化的图形用户界面,统一的界面使用图片或图标来代表磁盘驱动器、文件、子目 录以及其它操作系统的命令和动作。统一的用户界面也为程序员带来了好处。 Windows的多任务环境允许用户在同一时刻运行多个应用程序或同一个应用程序的多个实例。一个应用程序可能处于激活状态。激活的应用程序是指它正接收用户的输入。同一时间有也只能有一个应用程序处于激活状态,但可以有任意个数的并行运行的任务。,Windows提供了大量的内建 函数以方便地使用弹出菜单、滚动条、对话框、图标和其他一些友好的用户界面应该具有的特性。,可以很方便地使用常见菜单和对话框的内建函数。所有的菜单都具有相同风格的键盘和鼠标接口,因为是Windows而不是程序员在实现它。,8,Windows编程基础开发环境,可视化开发 系统集成了一系 列系统可用资源 和开发工具,9,Windows编程基础开发工具,面向对象编程语言 C+、Java、Delphi、VB 编程对象组件(对象) 窗口 对话框、按钮、资源(位图、图标、字符串) 开发Windows相当大的程度上在创建对象、修改组件对象的属性 对象的特征 静态属性 + 动态行为 编程方法,传统编写法:API 交互式方法:MFC,10,Windows编程基础API,API,API函数 的功能,为应用程序提供Windows系统特殊函数及数据结构,Win应用程序可以利用标准大量API函数调用系统功能,是Win系统与Win应用程序间的标准程序接口,11,Windows编程基本概念窗口,窗口,12,Windows编程基本概念界面组件,用户界面(窗口)的组成 窗口主边框和窗口子边框 用户区 控制菜单框 标题条 菜单条 工具条 水平滚动条和垂直滚动条 最大化/还原窗口按钮 最小化按钮 关闭按钮 状态条 .,13,Windows编程基本概念界面组件,用户界面组件皆为对象 将世界看成是一组彼此相关并相互通信的实体即对象组成,每个对象有一个名字来标识。例如,当看见一辆汽车时,所见到的是一辆汽车,而不是一大堆原子。可以将汽车分解为车轮、发动机、车门、油箱等,它们都是具体的实体即对象。 窗口本身及其成组成部分均可以看成对象。窗口的显示样式(效果)均可以改变或设置相应组件的属性来实现;窗口的动作也由组件之间发送消息来实现。,14,Windows编程基本概念界面组件,对象之间的通信被称为发送消息。 即一个对象请求另一个对象执行某种方式的操作。例如,交叉路口的红灯“请求”驾驶员停车,驾驶员在接受到消息之后,他所执行的动作是踏下制动踏板,这有向汽车发送了一条消息,汽车在接受到此消息之后,又将该消息分解之后发送到相关的对象上:制动器作用于车轮上,将动能转变成为势能,使车速降下来;尾灯又向它后面的其它车辆的驾驶员发送消息;各种仪表盘向驾驶员反馈出所发送的消息的动作结果。,15,Windows编程基本概念界面组件,从编程角度看,对象是内存中一块有名的存储单元。 所谓变量就是一种数据对象,但对象的概念比变量的含义更广义,通常将对象定义成为包含有数据和代码的内存区域,数据表征对象的特征(属性),而代码用于响应消息,使对象进行某些动作(行为)。,从屏幕上显示的一个可视的窗口对象为例,我们可以对比分析一下用户心目中的对象和程序员心目中的对象的关系。窗口对象的特征,例如颜色、长度、显示的内容等,在程序中对应为数据,用户对窗口对所做的操作,例如移动窗口、改变窗口的大小等,使得用户向窗口发送了消息,这些消息引起了计算机(内存中的)对象执行相应的代码,代码执行的结果改变了对象中的数据,使对应的可视对象的位置和大小发生了变化。,16,Windows编程基本概念界面组件,发送消息类似于标准的函数调用,但消息也有函数调用中没有的特性。例如,消息始终在执行一选择机制,其参数与其它消息区别开来,从而告诉该对象完成什么样的操作。一个函数名始终指向内存中该函数的代码所位于的确定地址,消息并不指向内存中的某地址,但却告诉接受消息的对象要引用的内存地址是什么。 函数不仅说明操作,而且还要执行如何完成该操作的方法。消息只说明该操作,在对象中定义的方法说明如何完成该操作。当向不同的对象发送相同的消息时,所执行的方法是不同的。,17,Windows编程基本概念句柄,句柄是Windows编程的基础。 Windows应用程序中存在许多对象,例如选单、窗口、图标、内存对象、位图、刷子、设备对象和程序实例等,在Windows中,对象使用句柄进行标识,通过使用一个句柄,应用程序可以访问一个对象。 所谓句柄是Windows使用的一种无重复整数。 句柄主要用来标识应用程序中的一个对象。 句柄只能进行赋值、与另句柄比较及是否NULL操作。,常用句柄类型及其说明,HWND 窗口句柄 HDC 设备环境句柄 HBITMAP 位图句柄 HCURSOR 光标句柄 HICON 图标句柄 HFONT 字体句柄 HMENU 菜单句柄 HPEN 画笔句柄 HFILE 文件句柄 HBRUSH 画刷句柄 HINSTANCE 当前实例句柄,18,句柄,应用程序通过 句柄访问相应 的对象信息,19,Windows编程基本概念消息,Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。 消息内容用一个结构体MSG来描述:,typedef struct tagMSG HWND hwnd; /窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message; /消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam; /字参数,有关消息的附加信息,不同消息其值有所不同 LPARAM lParam; /长字参数 DWORD time; 指定消息送至队列的时间 POINT pt; /指定消息发送时屏幕光标的位置,其数据类型POINT也是一个结构体 MSG;,typedef struct tagPOINT LONG x; LONG y; POINT;,20,附加信息与具体 消息号的值有关, 在Win中消息用 结构体MSG表示,21,VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:,BM 表示按钮控制消息 CB 表示组合框控制消息 DM 表示默认下压式按钮控制消息 EM 表示编辑控制消息 LB 表示列表框控制消息 SBM 表示滚动条控制消息 WM 表示窗口消息,窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息 控制通知消息 滚动条通知消息 非用户区消息 MDI消息 DDE消息 应用程序自定义的消息,Windows编 程常用消息,22,此外,相似的消息还有: WM_LBUTTONUP:放开鼠标左键时产生; WM_RBUTTONDOWN:单击鼠标右键时产生; WM_RBUTTONUP:放开鼠标右键时产生; WM_LBUTTONDBLCLK:双击鼠标左键时产生; WM_RBUTTONDBLCLK:双击鼠标右键时产生。,1.WM_LBUTTONDOWN:产生单击鼠标左键的消息,Windows应用系统常用消息,23,系统键是指实现系统操作的组合键,例如Alt与某个功能键的组合以实现系统菜单操作等。,3. WM_ CHAR:按下一个非系统键时产生的消息 wParam 为按键的ASCII码 1Param 与WM_KEYDOWN的相同,相似的消息还有WM_KEYUP, 在放开非系统键时产生,如F1的虚拟键码 在Windows.h文 件中定义为VK_F1,2.WM_KEYDOWN:按下一个非系统键时产生的消息 wParam:按下键的虚拟键码,用以标识按下或释放的键 1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。,24,wParam:未用 1Param:包含一个指向CREATESTRUCT数据结构的指针,wParam和1Param均未用。,wParam和1Param均未用。,4. WM_CREATE:由CreateWindow函数发出的消息 5. WM_CLOSE:关闭窗口时产生的消息 6. WM_DESTROY:由DestroyWiodow函数发出的消息,25,7. WM_QUIT:由PostQuitMessage函数发出的消息 退出应用程序时发出的消息 wParam:含退出代码,标识程序退出运行时的有关信息 1Param:未用 8. WM_PAINT,26,过程驱动方法计算平均成绩,事件驱动方法计算平均成绩,三、Windows中的事件驱动程序设计,27,一个完整的Windows应用程序通常由五种类型的文件组成。,1.C语言源程序文件 2.头文件 3.模块定义文件 4.资源描述文件 5.项目文件,四、Windows应用程序组成及编程步骤 1. 应用程序的组成,28,1. 所有应用程序的入口,类似Main函数, 2. 完成一系列的定义和初始化,并产生消息循环,WinMain和WndProc是 Windows应用程序的主体,2、源程序组成结构,29,(1) WinMain函数,三个基本的组成部分:函数说明、初始化和消息循环,WinMain函数,注意!Win是多任务管理的,同一应用程序的多个窗口可能会同时存在, 系统对每个窗口的执行称为一个实例并用一个实例句柄来唯一标识,30,(2) 初始化,i.窗口类定义,通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:,31,LoadCursor的作用是在应用程序中加载一个窗口光标 HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName),光标资源所在的模 块句柄,NULL则使 用系统预定义光标,光标资源名或系统 预定义光标标识名,应用程序调用函数GetStockObject获取系统提供的背景刷 HBRUSH GetStockObject(int nBrush);,32,ii.注册窗口类,Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。 RegisterClass( /wndclass为窗口类结构 RegisterClass函数的返回布尔值,注册成功则返回真,33,iii. 创建窗口实例,创建一个窗口类的实例由函数CreateWindow()实现 函数原型如下: HWND CreateWindow ( LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle, 窗口标题名 DWORD dwStyle, 创建窗口的样式 int x,y, 窗口左上角坐标 int nWidth,nHeight, 窗口宽度和度高 HWND hwndParent, 该窗口的父窗口句柄 HWENU hMenu, 窗口主菜单句柄 HINSTANCE hInstance, 创建窗口的应用程序当前句柄 LPVOID lpParam 指向一个传递给窗口的参数值的指针 ),34,35,iv显示窗口,窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口 ShowWindow(hwnd,nCmdshow);/nCmdshow为窗口显示形式标识,显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息。 UpdateWindow(hwnd);,36,(3) 消息循环,消息循环的常见格式如下: MSG Msg; while (GetMessage ( ,将消息的虚拟键 转换为字符信息,将消息传送到 指定窗口函数,从消息队列中读取 一条消息,并将消 息放在MSG结构中,其中函数GetMessage形式为: GetMessage (lpMSG, /指向MSG结构的指针 hwnd, nMsgFilteMin, /用于消息过滤的最小消息号值 nMsgFilterMax /用于消息过滤的最大消息号值 ),返回零值,即检索 到WM_QUIT消息,程 序结束循环并退出,将消息传递给窗口函数的相应过程处理,Windows将产生的消息,WinMain函数,37,WndProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,3 窗口函数WndProc,38,窗口函数的一般形式如下: LRESULT CALLBACK WndProc( HWND hwnd, UINT messgae, WPARAM wParam,LPARAM lParam ) switch(message) message为标识的消息 case break; case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wParam,lParam); return(0); ,在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数: void PostQuitMessage(int nExitCode) /nExitCode为应用程序的退出代码,为未定义处理过程的消息提供默认的处理,39,在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型,4数据类型,40,MSG:包含一个消息的全部信息,是消息发送的格式,WNDCLASS:包含一个窗口类的全部信息及属性,POINT:定义了屏幕上或窗口中的一个点的X和 Y坐标,RECT:定义了一个矩形区域及其左上角和右下角的坐标,几种重要的结构,5. 一些重要的数据结构,41,【例3-1】创建应用程序框架。本例的目的在于说明创建Windows应用程序的方法及过程,#include /包含应用程序中所需的数据类型和数据结构的定义 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); /窗口函数说明 /- 以下初始化窗口类 - int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lpszClassName = “窗口“; /窗口类名 char lpszTitle= “My_Windows“; /窗口标题名,五、应用程序举例,42,/窗口类的定义 wndclass.style=0; /窗口类型为默认类型 wndclass.lpfnWndProc=WndProc; /定义窗口处理函数 wndclass.cbClsExtra=0; /窗口类无扩展 wndclass.cbWndExtra=0; /窗口实例无扩展 wndclass.hInstance=hInstance; /当前实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); /窗口的最小化图标为默认图标 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ; /窗口采用箭头光标 wn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025钢筋供应合同样本
- GPU伺服器生产线项目初步设计
- 2025年中国联通考试试题及答案
- 音乐艺术概述题库及答案
- 声音的传播课件图文
- 声音具有能量课件
- 风景画步骤课件
- 人教版高中历史选修一第二单元1《改革变法风潮与秦国历史机遇》教学设计(共1课时)
- 风控管理入职培训课件
- 广西书法联考真题及答案
- 课堂高效学习的主阵地 教学设计-2023-2024学年高中上学期主题班会
- 2025年放射工作人员培训考试试题(附答案)
- 电力运行维护管理办法
- 高考熟词生义解密(复习讲义)-2026年高考英语一轮复习(北京专用)挖空版
- 2025年甘肃省高考政治真题卷含答案解析
- 2025年北京市中考英语试卷(含答案与解析)
- 浙江名校协作体(G12)2025年9月2026届高三返校联考英语(含答案)
- 2025年环保法律法规基础知识考试卷及答案
- 2026届新人教版高考物理一轮复习讲义:静电场及其应用(含答案)
- 专职安全生产管理人员综合类C证习题(含答案)
- 2025年市场监管总局机关公开遴选公务员面试模拟题及答案
评论
0/150
提交评论