《Windows应用程序》PPT课件.ppt

上传人:san****019 文档编号:7352865 上传时间:2020-03-20 格式:PPT 页数:26 大小:285.41KB
返回 下载 相关 举报
《Windows应用程序》PPT课件.ppt_第1页
第1页 / 共26页
《Windows应用程序》PPT课件.ppt_第2页
第2页 / 共26页
《Windows应用程序》PPT课件.ppt_第3页
第3页 / 共26页
点击查看更多>>
资源描述
第3章Windows应用程序 主要内容Windows编程基础知识Windows应用程序的基本结构作业 3 2 3 5 上机创建一个Windows应用程序基本结构 窗口 Windows编程的几个常用名词用VC编写windows程序有两种方式windowsc方式 SDK编程 直接调用Windows的API进行编程C 方式 对SDK函数进行包装 如VC中的MFC BCB中的VCL 学VC最好是先学用SDK编写程序 在掌握Windows操作系统的工作原理和各API函数的应用 然后再深入MFC WindowsSKD与APIWindowsSDK WindowsSoftwareDevelopmentKit Windows软件开发工具包 包括windows函数和常数定义 API函数说明文档 相关工具和示例 WIN32SDK是基于WIN32API编程的工具 在安装VisualC 时WIN32SDK同时被安装上 API ApplicationProgrammingInterface 应用编程接口 是操作系统留给应用程序的一个调用接口 应用程序通过调用API使操作系统去执行应用程序的命令 API由上千个API函数组成 win95中有两千多个 MFC是API的封装 结合面向对象的继承 多态组成的类 共有一百多个类组成 SDK与API关系密切 使用API编程也称 SDK编程 API和SDK是开发Windows应用程序 包括其它编程框架和类库MFC 的基础 MFC虽然比SDK编程有更高的抽象度 但在需要时可直接调用API函数 SDK的主要组成部分在线帮助 描述Windows编程用到的函数 消息 结构 宏及其他资源 各种编程工具 如对话框编辑器及图像编辑器等 Windows库及头文件 C语言编译系统 使用C语言编写Windows应用程序 变量 函数的匈牙利命名规 indows中变量 函数的命名规则 Mcrosoft采用匈牙利命名法 匈牙利命名法是由Mcrosoft的著名开发人员 Excel的主要设计者查尔斯 西蒙尼 国籍是匈牙利 在他的博士论文中提出来的 匈牙利命名法的规则 变量 函数的名字以一个或者多个小写字母开头 用这些字母来指定数据类型 见下页 名字前缀后是一个或多个第一个字母大写的单词 单词指出了对象的用途 例 m szStudentName表示一个学生名字的类成员变量 数据类型是字符串型 标准前缀的数据类型前缀类型bBOOL integer 布尔型byBYTE unsignedcharacter 字符型或无符号字符型c ctaracter 字符型 短整型dwDWORD unsignedlong 双字 或无符号长整型fn function 函数hHANDLE unsignedlong 句柄i integer 整型lLONG long 长整型lPLONG far pointer长整型 远指针nshortinteger短整型npshort near pointer短整型 近指针ppointer指针sstring 字符串zASCII字符串 以NULL或0结尾 wWORD unsigned 无符号整型xshort短整型 用作X坐标yshort短整型 用作Y坐标m 类成员变量sz以 0 结尾的字符串 3 1Windows编程基础知识1 Windows编程的特点 用户界面的一致性用户界面使用Windows内部例程构造菜单和对话框 每一个窗口都包含了相同的基本特性 窗口结构类似 这些基本特性在应用程序中是一致的 因而用户能很容易地适应新的应用程序 用基于图形的图标来代表应用程序和数据采用图形图像来代表文件 应用程序 窗口和目录等物理数据结构 用户可以通过鼠标的单击 双击及拖动等操作来管理这些物理结构 多窗口 多任务功能Windows允许同时运行几个应用程序 用户无需退出一个应用程序再进入另一个应用程序 而只需简单地在各个应用程序之间来回切换 多个任务多个窗口 一个应用程序占用一个窗口 切换任务可以在窗口间转换 独立于设备的图形开发能力Windows提供了丰富的内部例程 程序员可以直接使用菜单 对话框等组件构造友好界面 应用程序并不对硬件直接存取控制 程序员可以用一种与设备无关的方式来处理显示器 适配卡 键盘 打印机 系统定时器和通信接口等 不需要设计设备驱动程序 2 API函数和MFC类库 1 Windows应用程序编程接口API ApplicationProgrammingInterface 或称为Windows应用程序界面 也称为编程环境 应用API编程效率高 自由度大 API函数的核心组件和功能 Win16 Win32 USER EXE USER32 DLL 负责用户界面和窗口消息的传递GDI EXE GDI32 DLL 实现与设备无关的图形操作功能 KERNEL EXE KERNEL32 DLL 负责内存管理 加载 执行 调度程序及规划等 2 MFC类库 MicrosoftFoundationClass MFC类库集成了大量已经预先定义好的类 调用API提供的基类接口 用户可以根据编程的需要调用相应的类 或根据需要自定义有关的类 MFC与API编程有许多共同之外 因MFC隐藏了大量SDK编程的复杂考虑 封装了API的细节 使用更方便 Windows操作系统是用C 编写的 用VisualC 生成的代码短小 快速 高效 是驱动程序 动态链接库的强大编程工具 3 Windows编程的几个基本概念 1 窗口窗口是Windows应用程序基本操作的单元 是应用程序与用户交互的接口环境 也是系统管理应用程序的基本单位 窗口是一个接收和处理消息的对象 也是一个虚拟屏幕 用户的键盘 鼠标都送到该窗口中处理 输出文本或绘图也限制在窗口中 Windows应用程序可创建一个或多个窗口 在窗口中编写窗口过程 应用程序的运行过程即是窗口内部 窗口与窗口之间 窗口与系统之间进行数据处理与数据交换的过程 2 事件驱动Windows程序是由事件或消息产生驱动处理过程 每一个事件的发生 将在对应的消息队列中放一条消息 消息循环系统捕获消息去处理 消息是描述事件发生的信息 如 按下鼠标键时 系统就会产生一条鼠标按键事件 Windows程序的执行顺序取决于事件发生的顺序 3 句柄句柄 handle 是应用程序标识一个对象 如 窗口 菜单 实例等 的唯一表值 4字节整数索引值 应用程序通过句柄可以访问到对象 实例句柄 实例是程序加载运行的备份 系统为实例分配的句柄 常用部分句柄类型 表3 l 4 消息结构MSG的类型定义MSG在头文件windows h中 格式如下 typedefstructtagMSG 在C中定义一个结构体类型要用typedef MSG 是structtagMSG的别名 HWNDhwnd 消息接收的窗口句柄UINTmessage 消息编号 用以标识消息WPARAMwParam 消息附加信息 16位的消息参数LPARAMlParam 消息附加信息 32位的消息参数DWORDtime 消息被放入消息队列时的时间POINTPt 消息被放入消息队列的光标位置 MSG 结构别名 MSG 为以后应用使用 消息 message 的主要信息 窗口句柄 因所有消息都发往窗口 提供消息发往的窗口索引消息号 由事先定义好的消息名标识 表示消息类型 字参数 wParam 和长字参数 lParam 提供消息的附加信息 关键信息 message标识不同消息 值 以 WM 前缀开头 各类消息标识的定义在头文件Windows h中 例 选择采单项 一种命令 时将会产生消息WM COMMAND time消息被放入消息队列的时间 Pt消息被放入队列时鼠标的位置 仅供Windows系统使用 不传给窗口函数WndProc 它是POINT结构变量 POINT结构的类型定义格式POINT结构的类型定义在头文件windows h中 typedefstructtagPOINT intx x坐标值inty y坐标值 POINT 消息宏 标识 的常用前缀 P42 系统定义的消息分类 不同的前缀符号经常用于消息宏识别 BM表示按钮控件消息 CB表示组合框控件消息 DM表示默认下压式按钮控件消息 EM表示编辑控件消息 LB表示列表框控件消息 SBM表示滚动条控件消息 WM表示窗口消息 3 2Windows应用程序常用消息 在相关内容中介绍 3 3Windows中的事件驱动程序设计DOS下程序设计使用过程驱动的方法 程序按规定好的步骤操作 Windows程序设计用事件驱动方法 程序是处理发生消息的过程 3 4Windows应用程序的基本结构3 4 1windows应用程序的常用构成文件windows应用程序常用的文件类扩展名文件类型 c或 cppc或C 源程序文件 h头文件 包含外部常量 变量 数据结构和函数定义和说明等 rc资源描述文件 定义源程序使用的资源 dsw项目工作区文件 级别最高 点击它可打开一个项目 它包含了源文件清单 编译 连接选择 路径等设置 dsp项目文件 opt存放dsw文件中要用到的本地计算机有关配置信息 文件不能在不同计算机上共享 3 4 2应用源程序的基本构成 框架 Windows应用程序 创建窗口类 注册窗口类 创建窗口 显示窗口 消息循环 窗口函数1 窗口函数n 入口函数WinMain 应用程序队列1 应用程序队列n 消息n 系统消息队列 Windows应用程序的基本结构 以窗口为基础 由入口函数WinMain 窗口函数WndProc 窗口处理函数或窗口过程 等组成 1 WinMain函数的主要功能结构WinMain是Windows应用程序的入口 类似C中的main函数 其功能是被系统调用 WinMain的主要结构 变量定义 初始化创建窗口类 注册窗口类 定义窗口的总体特征创建窗口 定义窗口的细节消息循环 检测应用程序消息队列是否有消息 若收到消息 调对应的处理过程 当消息循环检索到WM QUIT消息时 终止程序运行 1 WinMain函数原型说明intWINAPIWinMain HINSTANCEhThisInst 应用程序当前实例句柄HINSTANCEhPrevInst 应用程序其他实例句柄LPSTRlpszCmdLine 指向程序命令行参数的指针IntnCmdShow 应用程序开始执行时窗口显示方式的整数值标识启动应用程序时 Windows把四个参数通过启动代码间接地传给WinMain函数 并自动赋上当前实例句柄给hThisInst WINAPI 在windef h中定义的宏 在Win32中WINAPI被定义为FARPASCAL 用来指示WinMain的参数入栈次序 括号内左边的参数先入栈 右边的参数后入栈 hThisInst 每执行一次应用程序 instance 都使用一个实例句柄 hPrevInst 先前的实例句柄 同一个程序打开两次 出现两个窗口 第一次打开的窗口就是先前实例的窗口 对于一个32位程序 该参数总为NULL lpszCmdLine 是一个以空终止的字符串 指定传递给应用程序的命令行参数 如系统将某个文本文件中的字符串作为命令行参数传给WinMain函数 以实现在windows下的操作 nCmdShow 指明窗口如何显示 该参数可以是下列值之一 SW HIDE 隐藏窗口并且激活另外一个窗口 SW MINIMIZE 最小化指定的窗口 并且激活在系统表中的顶层窗口 SW RESTORE 激活并显示窗口 如果窗口已经最小化或最大化 系统将以恢复到原来的尺寸和位置显示窗口 与SW SHOWNORMAL相同 SW SHOW 激活一个窗口并以原来的尺寸和位置显示窗口 SW SHOWMAXIMIZED 激活窗口并且将其最大化 SW SHOWMINIMIZED 激活窗口并将其最小化 以图标显示 SW SHOWMINNOACTIVE 将一个窗口显示为图标 激活窗口维持活动状态 SW SHOWNA 以窗口的当前状态显示窗口 激活窗口保持活动状态 SW SHOWNOACTIVATE 以窗口的最近一次的尺寸和位置显示窗口 激活窗口维持激活状态 SW SHOWNORMAL 激活并显示窗口 如果窗口最大化或最小化 系统将其恢复到原来的尺寸和位置 与SW RESTORE相同 2 初始化窗口类的定义 注册 创建窗口实例和显示窗口 可先定义一些与其相关的变量 定义变量先定义窗口句柄变量 消息结构变量 窗口类的结构变量等 HWNDhwnd HWND为窗口句柄类 hwnd为窗口句柄变量名MSGMsg MSG为消息结构 msg为消息结构变量名WNDCLASSwndclass WNDCLASS为窗口类的结构 wndclassc为窗口类结构变量名charlpszClassName 窗口 窗口类名charlpszTitle My Windows 窗口标题名 窗口类及预定义在Windows h中的WNDCLASS结构定义 typedefstructtagWNDCLASS UINTstyle 窗口类风格WNDPROClpfnWndProc 窗口处理函数指针intcbClsExtra 窗口类附加数据intcbWndExtra 窗口附加数据HANDLEhInstance 当前实例句柄HICONhIcon 窗口的最小化图标HCURSORhCursor 窗口内光标HBRUSHhbrBackground 窗口背景色LPSTRlpszMenuName 窗口中菜单指针LPSTRlpszClassName 窗口类名 WNDCLASS 窗口类风格 style 值 标识值意义CS BYTEALIGNCLIENT水平方向将窗口的客户区与字边界对齐CS BYTEALIGNWINDOW水平方向将窗口与字边界对齐CS CLASSDC向窗口类赋显示环境 各窗口共享CS DBCLKS向窗口发鼠标双击消息CS GLOBALCLASS定义全局窗口类CS HREDRAW窗口水平大小变化后重画窗口CS VREDRAW窗口垂直大小变化后重画窗口 窗口类预定义实例给窗口变量wndclass赋值 完成窗口的形式与功能的定义 wndclass style 0 窗口类型为缺省类型wndclass lpfnWndProc WndProc 窗口处理函数为WndProcwndclass cbClsExtra 0 窗口类无扩展wndclass cbWndExtra 0 窗口实例无扩展wndclass hInstance hInstance 当前实例句柄wndclass hIcon LoadIcon NULL IDI APPLICATION P46 函数LoadIcon为加载一个窗口图标 左上角的标志 NULL为系统预定义的 IDI APPLICATION为缺省图标 表7 10 wndclass hCursor LoadCursor NULL IDC ARROW P47 函数LoadCursor为加载一个窗口光标 NULL为系统预定义的 IDC ARROW为箭头光标 表6 4 wndclass hbrBackground HBRUSH GetStockObject WHITE BRUSH P47 GetStockObject取得系统背景刷 色 WHITE BRUSH为白色 表4 6 wndclass lpszMenuName NULL 窗口中无菜单wndclass lpszClassName lpszClassName 窗口类名为 窗口 每个应用程序都有窗口类 为创建窗口用 注册窗口类预定义的窗口类必须注册才能使用 窗口类的注册函数 RegisterClass wndclass wndclass为窗口类结构函数RegisterClass注册由指针指向变量wndclass的窗口类 注册成功则返回值为真 逻辑值 创建 应用程序 窗口注册窗口类仅定义窗口的总体特征 创建窗口定义窗口的细节 创建窗口函数CreateWindow 函数原型声明 HWNDCreateWindow LPCTSTRlpszClassName 窗口类名LPCTSTRlpszTitle 窗口标题名DWORDdwStyle 窗口的样式 表3 5 intX 窗口左上角坐标intY 窗口左上角坐标intnWidth 窗口宽度intnHeight 窗口高度HWNDhwndParent 该窗口的父窗口句柄HMENUhMenu 窗口主菜单句柄HINSTANCEhInstance 创建窗口的应用程序当前实例句柄LPVOIDlpParam 指向一个传递给窗口参数值的指针 创建窗口实例hwnd CreateWindow 创建的窗口句柄赋给句柄变量 lpszClassName 窗口类名lpszTitle 窗口实例的标题名WS OVERLAPPEDWINDOW 窗口的风格 表3 5 CW USEDEFAULT 窗口左上角坐标为缺省值CW USEDEFAULT CW USEDEFAULT 窗口的高和宽为缺省值CW USEDEFAULT NULL 此窗口无父窗口NULL 此窗口无主菜单hInstance 创建窗口应用程序的当前实例句柄NULL 不使用该值 显示窗口由ShowWindow和UpdateWindow函数实现 显示窗口 除客户区 函数ShowWindow hwnd nCmdShow hwnd创建窗口的句柄 nCmdShow指定窗口初显的形式 表3 6 不显示客户区 绘制窗口客户区函数UpdateWindow hwnd 调用函数UpdateWindow 产生WM PAINT消息 更新 重绘 客户区 消息循环消息循环机制窗口工作后 Window监视所有设备 若有消息 将消息放入系统消息队列 再复制到相应的应用程序消息队列中 通过消息循环检测消息 并将每一个消息发送给相应窗口函数中 消息循环的函数MSGMsg 消息变量 在前面定义 while GetMessage Msg NULL 0 0 TranslateMessage Msg DispatchMessage Msg returnmsg wParam 函数GetMessage从消息应用程序队列中读取一个消息 并将消息放在为窗口指定的消息结构变量Msg中 函数GetMessage的原形声明 GetMessage lpMSG 指向MSG结构变量的指针hwnd 窗口句柄 用于检测该窗口的消息nMsgFilteMin 用于消息过滤的最小消息号值nMsgFilterMax 用于消息过滤的最大消息号值函数TranslateMessage将虚拟键 键入 消息转为ASCII码字符消息 WM CHAR 其原形声明 TranslateMessage lpMSG 函数DispatchMessage将lpMSG指向的消息 传送到对应窗口函数 过程 其原形声明 DispatchMessage lpMSG 当GetMessage函数返回零值 即检索到WM QUIT消息 结束循环并退出 returnMsg wParam 有消息时 返回Msg中的附加信息 wParam 2 窗口函数 过程 窗口函数 定义不同消息响应的处理过程 根据消息转向程序窗口函数由一个或多个switch语句组成 每一条case语句对应一种消息 当应用程序接收到一个消息时 相应的case语句被激活并执行相应的响应程序模块 窗口函数的一般形式LRESULTCALLBACKWndProc HWNDhwnd UINTmessage WPARAMwParam LPARAMlParam switch message case break caseWM DESTROY PostQuitMessage 0 调用PostQuitMessage发出WM QUIT消息default 采用系统消息默认处理函数returnDefWindowProc hwnd message wParam lParam return 0 WM DESTROY消息当在系统菜单选择菜单项 关闭 Close 结束程序时 发出这个消息 CaseWM DESTROY PostQuitMessage 0 break WM DESTROY消息 主要使程序做清理工作 然后再关闭 对话框要求用户确认是否关闭 确认关闭时 将保存一些文件 PostQuitMessage 0 函数 将把WM QUIT消息放入应用程序的稍息队列 终止WinMain函数的消息处理循环 结束程序运行 默认处理标准组件最后一段代码 为所有WndProc消息处理函数的标准组件 default returnDefWindowProc hwnd message wParam lParam return 0 执行DefWindowProc函数 会发出一些WM SYSCOMMAND消息 由Windows执行窗口共用的各种操作 如绘制窗口的非客户区 更新窗口的标题 移动窗口和改变窗口大小等 Windows将许多消息的处理部分封装在这过程中 大约有l 3的消息由它处理 3 数据类型常用的部分Windows数据类型及其说明如表2 8所示 4 数据结构 1 MSG 2 WNDCLASS 3 POINT 4 RECTRECT结构定义一个矩形区域 它在WINDOW H中的结构定义 typedefstructtagRECT LONGleft 矩形框左上角x坐标LONGtop 矩形框左上角Y坐标LONGright 矩形框右上角X坐标LONGbottom 矩形框右上角Y坐标 RECT 例3 1应用程序窗口 本章小结Windows应用程序的基本框架入口函数WinMain由窗口类预定义 注册窗口类 创建窗口 显示窗口 消息循环组成 窗口函数 可以是一个以上 2 消息处理过程Windows系统监视着所有的设备 当事件发生时 驱动程序调用USER模块中的函数 将事件转化成格式化的消息后 放到 系统消息队列 中 随后将消息复制到相应的应用程序队列中 由应用程序中的消息循环程序从队列中检索消息 并将每一个消息发送到相应的窗口函数中 应用程序的消息循环过程如下 消息循环调用GetMessage函数 检测消息 若有消息 调用DispatchMessage函数 将送来的消息送给对应的窗口函数处理 窗口函数执行处理消息的过程 处理完消息返回到消息循环中 3 Windows编程的注意事项不要完全占用CPU的时间 否则会影响其它程序的执行 一般不能对内存或硬件进行直接存取控制 对硬件访问要有驱动程序 不要使用C C 语言中的I O函数用于端口或屏幕等控制
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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