Windows编程基础.ppt

上传人:sh****n 文档编号:6570319 上传时间:2020-02-29 格式:PPT 页数:43 大小:495.31KB
返回 下载 相关 举报
Windows编程基础.ppt_第1页
第1页 / 共43页
Windows编程基础.ppt_第2页
第2页 / 共43页
Windows编程基础.ppt_第3页
第3页 / 共43页
点击查看更多>>
资源描述
第9章Windows编程基础 Windows程序设计的基本概念Windows的事件驱动机制Windows应用程序中常见的消息Windows程序设计的基本框架 本章主要内容 9 1Windows程序设计基本概念 1 VisualC 应用程序设计方法 1 使用Windows提供的WindowsAPI函数WindowsAPI是Windows系统和Windows应用程序间的标准程序接口 应用程序可以通过此接口访问系统 2 使用Microsoft提供的MFC类库MFC类库集成了大量已经预先定义好的类 用户可以根据编程的需要调用相应的类 或根据需要自定义有关的类 本章要点 内容 使用Windows提供的API函数进行Windows程序设计目的 掌握Windows程序的基本结构理解Windows程序的运行机制 2 Windows程序设计基本概念 1 窗口窗口是应用程序与用户之间交互的接口环境 用户可以通过窗口输入数据 控制应用程序的运行 应用程序可以通过窗口显示数据和状态 2 对象与句柄对象是指Windows的规范部件 包括各种窗口 菜单 按钮 对话框以及程序模块等 所谓句柄 就是一个唯一的整数值 是一个4字节长的数值 用以标识许多不同的对象类型 如窗口 菜单 内存 画笔 画刷和文件等 由于Windows是一个多任务操作系统 它可以同时运行多个程序或一个程序的多个副本 Windows不仅使用句柄来管理实例 也用它来管理窗口 位图 字体 元文件和图标等系统资源 常见的Windows对象句柄如表9 1所示 所有的句柄类型以H开头 3 事件驱动Windows应用程序以消息为基础 以事件驱动之 Windows应用程序启动之后将进入一个消息循环 等待系统或应用程序的消息 消息的产生是因为事件发生的结果 Windows程序设计主要围绕编写事件或消息的响应函数上 4 消息 Message 及其在Windows编程中的应用 消息 就是指Windows发出的一个通知 告诉应用程序某个事情发生了 例如 单击鼠标 改变窗口尺寸 按下键盘上的一个键都会使Windows发送一个消息给应用程序 消息是应用程序和计算机交互的途径 在计算机上几乎做每一个动作都会产生一个消息 鼠标被移动会产生WM MOUSEMOVE消息 鼠标左键被按下会产生WM LBUTTONDOWN的消息 鼠标右键按下便产生WM RBUTTONDOWN消息等 Windows应用程序是由消息驱动的 Windows系统下每一个应用程序窗口都维护一个消息队列 操作系统接收和管理所有输入消息 系统消息 并把它们发送给相应窗口的消息队列 应用程序初始化完成后 进入消息循环 维护自己的消息队列 从中取出消息 并进行处理 编写消息处理函数是Windows编程的主要工作之一 系统传递给应用程序的消息数据是一个MSG结构体数据类型的数据 消息的功能 功能帮助Windows实现多任务 通知应用程序某一事件已经发生 各应用程序给予响应 消息的组成 操作系统是怎样将感知到的事件传递给应用程序呢 这是通过消息机制 Message 来实现的 操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序 包含了消息的类型以及其他信息 例如 对于单击鼠标所产生的消息来说 这个记录中包含了单击鼠标时的坐标 在winuser h中 消息结构体MSG的定义如下 typedefstructtagMSG 消息 HWNDhwnd 目标窗口句柄UINTmessage 消息标识WPARAMwParam 消息参数1LPARAMlParam 消息参数2DWORDtime 消息发送时间POINTpt 消息发送时鼠标的屏幕坐标 MSG 消息标识message是利用 define宏定义好的消息名标识 是用于区别其他消息的常量值 每个Windows消息都有一个信息值 该值由windows h头文件中的宏定义来标识 Windows程序和Windows消息处理的基本流程 Windows消息分类 在windows系统中 大约有近千种消息 大致可以分为3类 1 Windows消息此类消息主要包括以前缀WM 开头的消息 WM COMMAND除外 如键盘消息 鼠标消息 Windows消息由窗口和视图处理 如 WM LBUTTONDOWN单击鼠标左键产生的消息 2 控件消息例如按钮 列表框的选择等都会产生通告消息 控件消息是从控件传送给父窗口的消息 3 命令消息此类消息包括用户界面对象 菜单 工具栏按钮和快捷键 发出的WM COMMAND通知消息 在Win32中 消息统一由一个MSG结构来描述 每一条消息在消息队列中放置一个MSG结构变量 一般情况下 应用程序只需对结构中的消息类别message 附加参数wParam和lParam三个字段进行判断就可以区别一个消息 系统保留消息标识符的值在0 x0000在0 x03ff WM USER 1 范围 这些值被系统定义消息使用 应用程序不能使用这些值给自己的消息 应用程序消息从WM USER 0X0400 到0X7FFF 或0XC000到0XFFFF WM USER到0X7FFF范围的消息由应用程序自己使用 0XC000到0XFFFF范围的消息用来和其他应用程序通信 WM NULL 0 x0000空消息 0 x0001 0 x0087主要是窗口消息 0 x00A0 0 x00A9非客户区消息0 x0100 0 x0108键盘消息0 x0111 0 x0126菜单消息0 x0132 0 x0138颜色控制消息0 x0200 0 x020A鼠标消息0 x0211 0 x0213菜单循环消息0 x0220 0 x0230多文档消息0 x03E0 0 x03E8DDE消息0 x0400WM USER0 x8000WM APP0 x0400 0 x7FFF应用程序自定义私有消息 消息的传递 Windows系统有一个存放消息的队列 每个应用程序也有一个消息队列 Windows系统先将收到的消息存放在系统队列中 然后再分发到相应的应用程序队列中 应用程序则从自身的队列中获取消息并进行处理 9 2Windows中的事件驱动 Windows应用程序以消息为基础 以事件驱动之 事件用来标识发生的某件事情 主要采用以下三种方式产生 1 通过输入设备 如键盘和鼠标 2 通过屏幕上的可视对象 如菜单 工具栏按钮 滚动条和对话框上的控件 3 来自Windows内部 事件驱动程序设计是围绕着消息的产生与处理而展开的 一条消息是关于发生的事件的信息 作为一个Windows程序员 其工作就是对正开发的应用程序所要发出或要接收的消息进行排序和管理 Windows中事件产生的消息由系统传递给应用程序 应用程序必须有一个消息循环接收消息和处理相应的消息 消息循环的实现如下 MSGmsg 定义一个MSG类型的变量while GetMessage 将消息传递给窗口函数 以便处理相应的消息 9 3Windows应用程序中常见消息 1 鼠标消息 2 键盘消息 1 WM KEYDOWN这是在按下一个非系统键时产生的消息 此外相似的消息还有WM KEYUP 它是在放开非系统键时产生 2 WM CHAR这也是按下一个非系统键时产生的消息 3 关闭窗口消息关闭窗口时产生的消息是WM CLOSE 4 退出程序消息退出程序时产生的消息是WM QUIT 这是退出应用程序时由PostQuitMessage函数发出的消息 ThePostQuitMessagefunctionindicatestothesystemthatathreadhasmadearequesttoterminate quit ItistypicallyusedinresponsetoaWM DESTROYmessage WhenthethreadretrievestheWM QUITmessagefromitsmessagequeue itshouldexititsmessageloopandreturncontroltothesystem TheexitvaluereturnedtothesystemmustbethewParamparameteroftheWM QUITmessage 5 重画消息当发生用户区移动或显示事件 用户窗口改变大小的事件以及程序通过滚动条滚动窗口时 均产生一条WM PAINT消息 此外 当下拉式菜单关闭并需要恢复被覆盖的部分以及Windows清除对话框或消息框等对象 并需要恢复被覆盖的部分时 将产生WM PAINT消息 WM PAINTAnapplicationsendstheWM PAINTmessagewhenthesystemoranotherapplicationmakesarequesttopaintaportionofanapplication swindow ThemessageissentwhentheUpdateWindoworRedrawWindowfunctioniscalled orbytheDispatchMessagefunctionwhentheapplicationobtainsaWM PAINTmessagebyusingtheGetMessageorPeekMessagefunction 例 一个简单的Windows32应用程序 includeintAPIENTRYWinMain HINSTANCEhInstance HINSTANCEhPreinstance LPSTRlpCmdLine intnCmdshow MessageBox NULL 一个简单的Win32应用程序 例9 1 MB OK return0 9 4Windows应用程序的基本框架 1 Windows应用程序的组成一个完整的Windows应用程序通常由五种类型的文件组成 见下表 2 WindowsAPI应用程序实例Windows应用程序的开始部分十分相似 下面通过一个实例的分析充分展示Windows应用程序的各个部分 例9 1 简单窗口显示 3 WindowsAPI应用程序结构分析Windows的应用程序具有相对固定的基本结构 其中由入口函数WinMain和窗口函数构成基本框架 并包含各种数据类型 数据结构与函数等 1 WinMain函数WinMain函数是所有Windows应用程序的入口 类似于C语言中的main函数 其功能是完成一系列的定义和初始化工作 并产生消息循环 WinMain函数有三个基本的组成部分 函数说明 初始化和消息循环 1 WinMain函数说明intWINAPIWinMain HINSTANCEhInstance 应用程序当前实例句柄HINSTANCEhPrevInstance 应用程序其他实例句柄PSTRszCmdLine 指向程序命令行参数的指针intiCmdShow 应用程序开始执行时窗口显示方式 的整数值 2 初始化初始化包括窗口类的定义 注册 创建窗口实例和显示四个部分 窗口类的定义窗口类定义通过给窗口类数据结构WNDCLASS赋值完成 结构体类型WNDCLASS的定义如下 typedefstructtagWNDCLASS UINTstyle 窗口类的样式 一般设置为0WNDPROClpfnWndProc 指向窗口函数的指针intcbClsExtra 分配在窗口类结构后的字节数intcbWndExtra 分配在窗口实例后的字节数HINSTANCEhInstance 定义窗口类的应用程序的实例句柄HICONhIcon 窗口类的图标HCURSORhCursor 窗口类的光标HBRUSHhbrBackground 窗口类的背景刷LPCWSTRlpszMenuName 窗口类的菜单名LPCWSTRlpszClassName 窗口类名 WNDCLASS 注册窗口类RegisterClass wndclass为窗口类结构窗口类必须先注册后使用 创建窗口创建一个窗口类的实例由函数CreatWindow 实现 该函数的原型为 HWNDCreateWindow LPCTSTRlpClassName 窗口类名LPCTSTRlpWindowName 窗口标题名称DWORDdwStyle 窗口样式 常用窗口样式见表9 5intx 窗口左上角横坐标inty 窗口左上角纵坐标intnWidth 窗口宽度intnHeight 窗口高度HWNDhWndParent 该窗口的父窗口句柄HMENUhMenu 窗口主菜单句柄HANDLEhInstance 创建窗口的应用程序当前句柄LPVOIDlpParam 指向一个传递给窗口的参数值的指针 显示窗口由ShowWindow和UpdateWindow函数共同实现 ShowWindow hwnd nCmdShow UpdateWindow hwnd 其中 hwnd为窗口句柄 nCmdShow为窗口显示形式标识 常见显示形式标识及特点见表9 6 调用完ShowWindow后 应用程序调用UpdateWindow更新窗口 并发出WM PAINT消息 绘制用户区 3 消息循环MSGmsg 定义一个MSG类型的变量while GetMessage 消息分发 GetMessage的作用是从消息队列中读取一条消息 并将消息放在一个MSG结构的变量中 TranslateMessage的作用是翻译消息 如将键盘操作转化为消息 DispatchMessage函数将消息传递给窗口函数 以便处理相应的消息 2 窗口函数窗口函数是应用程序处理接收到的消息的函数 其中包含了应用程序对各种可能接收到的消息的处理过程 是消息处理分支控制语句的集合 一般来说 窗口函数由一个或多个switch语句组成 每一个case语句对应一种消息 当应用程序接受到一个消息时 在窗口函数内的相应的case语句就会被激活并执行相应的响应程序模块 窗口函数的一般形式如下 LRESULTCALLBACKWndProc HWNDhwnd 窗口句柄UINTiMsg 代表所处理消息的消息值WPARAMwParam 消息的附加参数LPARAMlParam 消息的附加参数 switch iMsg caseWM DESTROY PostQuitMessage 0 调用函数PostQuitessage退出程序return0 系统默认的处理过程 以保证所有发送到该窗口的消息均得以处理 returnDefWindowProc hwnd iMsg wParam lParam Windows中的数据类型除了C 中经典的数据类型 在32位Windows的C 开发平台中 为了满足数据定义的需要 扩充定义了一些新的数据类型 一般而言 指针数据类型以P或LP作为前缀 句柄类型以H作为前缀 参下表或MSDN Windows常用的基本数据类型 Windows基本数据类型 说明 这些基本数据类型都是用大写字符来表示 以与一般C 基本数据类型相区别 数据类型的前缀是P或LP 表示是一个指针或长指针数据类型 前缀是U 表示无符号数据类型 等等 Windows还提供一些宏来处理上述基本数据类型 Windows中的数据类型类型定义 BOOL布尔型 逻辑型 变量 应为TRUE或FALSE BOOLEAN布尔型 逻辑型 变量 应为TRUE或FALSE BYTE字节 8位 CCHARWindows字符CHARWindows字符COLORREFRGB 红绿蓝 颜色值 32位 CONST在执行时其值保持不变的变量DLGPROC指向应用程序定义的对话框过程回调过程的指针DWORD双字 32位 DWORDLONG双双字 64位 FARPROC指向应用程序定义的指针FLOAT浮点型变量GLOBALHANDLE全局内存块句柄HACCEL加速键表句柄HANDLE对象句柄 Windows中的数据类型类型定义 HBITMAP位图句柄HBRUSH画刷句柄HDC设备描述表句柄HFILE文件句柄HFONT字体句柄HGDIOBJGDI 图形设备接口 对象句柄HGLOBAL全局内存块句柄HHOOK钩子句柄HICON图标句柄HINSTANCE实例句柄HLOCAL本地内存句柄HMENU菜单句柄HOOKPROC指向应用程序定义的钩子的指针HPALETTE调色板句柄HPEN画笔句柄HWND窗口句柄LOCALHAND本地内存句柄 Windows中的数据类型类型定义 LONG32位无符号值LONGLONG64位无符号值LPARAM32位消息参数LPCSTR指向Windows常字符串 以空字符结束 的指针LPSTR指向Windows字符串 以空字符结束 的指针LPVOID指向任意类型的指针PROC指向回调函数的指针SHORT短整型数UCHAR无符号Windows字符UINT无符号整数ULONG无符号长整型数 32位 USHORT无符号知整型数 16位 VOID任意类型WNDPROC指向在应用程序中定义的窗口过程的指针WORD无符号字 16位 WPARAM32位消息参数 作业 上机调试例9 1
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!