




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章开发Windows应用程序的技术基础 应用程序的结构 解决多任务的关键控制核心应该从程序本身转移到Windows操作系统由Windows操作系统决定那个应用程序可以占用CPU时间 程序的结构也不再是过程式程序中的赋值 循环 分支等C语言中常见的结构 而是消息 处理 为了解决这个问题 应用程序采用一种称为 事件驱动结构 是合适的 C语言程序的主体结构 Main 定义函数1定义函数2 定义函数nC语言程序的主体结构是主函数Main和一些函数定义所组成 Windows应用程序的结构 Windows应用程序的结构有两个函数所组成 一个是WinMain函数 另一个称为窗口函数 又称窗口消息处理程序 WinMainWindowsCALLBACKFunctionWindowsFunction 事件驱动程序设计 过程式程序设计执行流程按照编程人员编出程序的顺序进行 事件的发生顺序由编程人员指定 过程式程序是单执行流程式 DOS操作系统只是简单地执行程序 然后等待它的完成 事件驱动程序设计 事件驱动程序概念Windows操作系统不仅执行程序 还与应用程序通信 即向应用程序发送消息 Windows程序的行为依赖产生消息的事件驱动 故称为 事件驱动程序 Windows程序在初始化和创建应用窗口结束后 只是在执行一个无限循环 坐等用户的输入消息 键盘 鼠标 一旦用户输入事件发生 Windows就会收到相应的消息并进行分析 然后发送给对应的应用程序 事件驱动程序原理 Windows应用程序的工作原理 DOS应用程序输入方式应用程序经常会处在一个等待输入消息的循环中 只要读不到这个输入消息 就一直会处在等待之中 Windows应用程序输入方式Windows操作系统负责收集输入消息并把它存入系统消息队列 然后由操作系统再分送给应用程序消息队列 以供应用程序的消息循环来读取 Windows应用程序的工作原理 消息循环应用程序在建立显示窗口后就进入一个消息循环 等待消息的来到 while GetMessage Windows应用程序的工作原理 消息循环GetMessage函数从应用程序消息队列取得消息 如果成功取得 就进入消息循环 TranslateMessage函数的功能是变换消息 使它规范化以便于处理 DispatchMessage根据MSG提供的消息 提请操作系统帮助 把消息由操作系统送到相应应用程序的窗口函数并由操作系统调用相应的窗口函数 窗口函数执行完后 返回的不是应用程序 而是操作系统 Windows应用程序的工作原理 消息传送给窗口函数的两种方式Windows首先把消息从系统队列送至ApplicationQueue 再由消息循序通过操作系统把消息送给窗口函数 对应函数为postmessage Windows直接把消息送给窗口函数 对应函数为sendmessage Windows应用程序的工作原理 程序退出关闭窗口时 Windows会发送WM DESTROY消息给这个窗口的窗口函数 窗口函数分辨出WM DESTROY消息后 将屏幕上的窗口删除 然后以post方式将WM QUIT窗口消息送给应用程序队列 ApplicationQueue 消息循序收到WM QUIT后 将Messageloop结束 整个应用程序也就跟着结束 窗口类的作用及其用法初步 每个Windows应用程序 或进程 都要有一个主窗口 每主个窗口代表一个应用程序 决定窗口形状的数据结构由windows操作系统决定 在应用时需要填写结构中的条款 然后注册 并成为窗口类 C语言的编译图示 Windows应用程序编译过程 编写WinMain和WindowsFunctions用资源编辑器编写好应用程序中要用的资源文件建立资源描述文件 RC建立模块定义文件 DEF编译器产生程序目标码 再进行TLINK连接产生EXE文件 资源编译器编译资源描述文件 产生二进制资源文件 RES资源编译器将5产生的 EXE文件和6产生的 RES文件组合成应用程序的可执行的 EXE文件 Winow程序编译所需文件 RC文件早期windows应用程序的图标文件由编程人员编写 Windows将其作为一个标准件 简称资源 集成开发环境提供资源文件编辑器 Windows系统为用户提供了足够的常用资源 如图标 光标等 资源有ASCII码格式资源 二进制资源两种 由于一个应用程序要用到很多资源 因此需要资源描述文件 RC 以便资源编译器生成RES文件 Winow程序编译所需文件 DEF文件用来定义应用程序的模块名称 模块的属性 如区段特性 是固定还是可移动 堆栈的大小 堆存储区的大小等 NAME执行程序名DISCRIPTION对执行程序的说明CODE是否可移动 HEAPSIZE堆大小STACKSIZE堆栈大小 Winow程序编译所需文件 H文件Windows h windows头文件分层结构的入口 然后在其中引用更多的头文件 Windef h 包含了许多对简单和集合数据的定义 还定义了很多同义词 Winnt h 定义了大量Win32API定义 还定义了代号最原始的定义 typedefvoid HANDLE defineDECLARE HANDLE name typedefHANDLEname 标识符的匈牙利命名惯例 约定在声明和定义变量 常数 函数和结构时遵循的规则 使变量等标识符有一定的含义 由匈牙利籍微软程序设计约定 故称匈牙利命名惯例 标识符以一个或者几个小写字母开始 这些小写字母表示标识符的数据类型大小写混杂写 使得标识符具有一定的含义 便于理解 增强可读性 动态链结和动态链结库 静态链接调用函数的机器码在链接过程中会合并到程序本身中 若同时运行多个含有相同调用函数的程序时 被调用函数在内存中存在多份 动态链接调用函数的机器码存在于公共地方 程序在执行时 就到该地方取用 存放这些机器码的文件称为动态链接库 PASCAL与WINAPI调用规范 C调用规范函数的参数压如堆栈的顺序是自右向左 计算参数是按照从左向右顺序进行 堆栈指针由主程序来完成 支持同一函数接受不同数目的参数 printf 16位windowsPASCAL调用规范函数的参数压如堆栈的顺序是自左向右 计算参数是按照从右向左顺序进行 堆栈指针由被调用函数来完成 PASCAL与WINAPI调用规范 stdcall调用函数的参数存入堆栈按照标准C的调用规范 但堆栈的清除按照16位PASCAL惯例 definepascal stdcall definePASC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长春中考试卷历史及答案
- 2025年中国银行招聘英语能力测试模拟题与答案详解
- 2025年内部审计基础知识点梳理及初级考试要点
- 2025年乡镇民政办招聘低保核查员考试模拟题及参考答案
- 《Java Web编程》课程简介与教学大纲
- 介绍某个民族文化
- 3-1证券经纪人委托代理合同2篇
- 电影(电视剧)版权转让合同4篇
- 国内快递协议合同5篇
- 安全培训国家题库课件
- 农贸市场消防整改报告
- (高清版)DZT 0337-2020 矿产地质勘查规范 油砂
- 【培训课件】5S培训课程讲义
- 2000-2015年考研英语一真题及详细解析
- 2021年10月自考健康教育与健康促进试题及答案
- 假性软骨发育不全综合征介绍演示培训课件
- 保险行业纳税筹划案例分析
- 私立民办高中学校项目建议书
- 比亚迪汽车发展史
- 他们创造了数学:50位著名数学家的故事
- 财务管理-企业筹资方式
评论
0/150
提交评论