收藏 分享(赏)

第03章 开发Windows应用程序的技术基础.ppt

上传人:Facebook 文档编号:2236394 上传时间:2018-09-06 格式:PPT 页数:26 大小:299KB
下载 相关 举报
第03章 开发Windows应用程序的技术基础.ppt_第1页
第1页 / 共26页
第03章 开发Windows应用程序的技术基础.ppt_第2页
第2页 / 共26页
第03章 开发Windows应用程序的技术基础.ppt_第3页
第3页 / 共26页
第03章 开发Windows应用程序的技术基础.ppt_第4页
第4页 / 共26页
第03章 开发Windows应用程序的技术基础.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、第 3 章 开发Windows应用程序的技术基础,本章主要目的是向读者介绍编写Windows应用程序所采用的基本技术, 约定和惯例,API的结构与基本用法等作了介绍,对Windows应用程序的各个组成部分也作了初步介绍,并用框图的形式介绍Windows应用程序的工作原理。,3.1 应用程序的结构与编译,解决多任务的关键是: 控制核心应该从程序本身转移到Windows操作系统。 应该由Windows操作系统决定那个应用程序可以占用CPU时间,程序的结构也不再是过程式程序中的赋值、循环、分支等C语言中常见的结构,而是消息,处理。 为了解决这个问题,应用程序采用一种称为”事件驱动结构”是合适的。 所

2、谓非抢占式是指一旦这个应用程序取得了执行权,就一直要把这个程序执行下去,除非遇到新的消息来干预。否则,其他程序没有办法执行。 如果把非抢占式和”事件驱动结构相结合,那就是Win16操作系统下的应用程序。,3.1.1 Windows应用程序的结构和C语言程序结构的比较,C语言程序的主体结构是int main()定义函数1定义函数2定义函数n,3.1.1 Windows应用程序的结构和C语言程序结构的比较,而Windows应用程序的结构可以用下面的框图来表示。图3-1 Windows应用程序的结构有两个函数所组成, 一个是WinMain函数, 另一个称为窗口函数,又称窗口消息处理程序。,WinMa

3、in,Windows Function,3.1.2 Windows应用程序的编译和C语言程序编译的比较,1、C语言的编译图示,yy1.h,yy2.h,yyn.h,ok1.c,ok2.c,okn.c,Yes.obj,Yes.exe,math.lib,graphics.lib,2、Windows应用程序的编译,C语言的编译图示,Windows程序的C代码文件,Winddows程序的资源,对话框编程器,图像编程器,字体编程器,资源编译器,C编译器,链接器,3.1.3 编译应用程序所需的六个基本文件,源代码文件,文件的后缀是.C或.CPP; 资源文件 位图(.bmp) 图标(.ico) 菜单等资源(.

4、res) 对话框(dlg) 字体(fnt) 也资源描述文件(.rc) 资源编译器会对RC文件提供的资源信息进行生成和编译,并把它们插入到exe文件,形成真正的可执行文件。,3.1.3 编译应用程序所需的六个基本文件,头文件(.h) WINDOWS.H头文件 WINDEF.H头文件,包含有大量简单和集合数据的定义,这些数据在Win32编程中经常要用到 WinNT.h 项目文件(.MAKE) 模块文件(.DEF),3.1.3 Windows程序中基本数据类型,3.2 Windows 应用程序设计接口(API),两种API Win16 API Win32 API 三个核心API组件,3.3 标识符的

5、匈牙利命名惯例,为什么此惯例称为匈牙利命名惯例。 匈牙利命名惯例的两条约定。 标识符以一个事者几个小写字母开始,这些小写字母表示标识符的数据类型 大小写混杂写,使得标识符具有一定的含义,便于理解,增强可读性。,#include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) MessageBox ( NULL, TEXT(“Hello, Windows XP!“), TEXT (“HelloMsg“), 0);return 0; ,3.3 标识符的匈牙

6、利命名惯例,3.4 事件驱动程序设计,什么是事件驱动程序设计,它与传统程序设计有什么区别。 事件驱动程序: Windows应用程序是消息驱动程序,又称事件驱动程序 事件驱动意味着操作系统的每一部分之间,以及操作系统与应用程序之间都是通过“消息”进行通信联系的。 计算机中的一个事件通过驱动程序变成一个消息 鼠标事件产生鼠标消息 键盘事件产生键盘,3.4 事件驱动程序设计,int WinMain(hInst, hPrev, .) MSG msg; RegisterClass(.); / 向Windows系统注册窗口类 CreateWindow(.); / 创建应用程序的窗口 ShowWindow(

7、.); / 显示刚才创建的窗口/ 进入消息循环 while(GetMessage( ,int WindowsFunction() ,3.4 事件驱动程序设计,事件驱动程序的工作原理,开始,填写窗口类的条款 向Win注册窗口类,创建应用程序窗口,从程序的消息队列中获取一个消息,是WM_QUIT消息吗?,结束,窗口函数处理该消息,非,是,消息循环 while (GetMessage ( ,int WindowsFunction() ,3.4 事件驱动程序设计,消息与消息处理是实现事件驱动的关键。,3.7 Windows应用程序的工作原理,Windows程序对输入消息的获得与处理 Windows操作

8、系统负责收集输入消息并把它存入系统消息队列(system queue) 然后由操作系统再分送给应用程序消息队列(application queue),以供应用程序的消息循环来读取,System Queue,Application Queue,int WinMain() while (GetMessage (.,int WindowsFunction() ,Windows System,3.7 Windows应用程序的工作原理,窗口消息传送给窗口函数的途径: Windows首先把消息从系统队列送到Application Queue,再由应用程序的消息循环去提取,并委托操作系统把消息送给窗口函数:

9、PostMessage()函数 Windows直接把消息送给窗口函数:SendMessage()函数。,3.7 Windows应用程序的工作原理,当使用者准备关闭某窗口时 Windows会送WM_DESTORY消息给这个窗口的窗口函数 窗口函数分辨出WM_DESTORY消息后,就会将屏幕上的窗口删除,然后用post方式将WM_QUIT消息送给Application Queue。 应用程序的消息循环收到WM_QUIT消息,从而消息循环结束 WinMain()函数结束,于是该Windows程序结束,3.7 Windows应用程序的工作原理,当使用者准备关闭某窗口时,WM_DESTORY,WM_QU

10、IT,应用程序消息队列,窗口函数(消息处理函数) int WndProc() ,int WinMain() while (GetMessage (.,Windows 操作系统,Windows应用程序,send,3.8 窗口类的作用及其用法初步,窗口 每个Windows应用程序(或进程)都要有一个窗口,每个窗口代表一个应用程序。窗口类 一个应用程序在创建某个类型的窗口前,必须首先注册该“窗口类”(Windows Class)。,3.8 窗口类的作用及其用法初步,typedef struct tagWNDCLASSA / ASCII版本 UINT style; / 窗口类的风格WNDPROC lp

11、fnWndProc; / 窗口函数(过程)int cbClsExtra;int cbWndExtra;HINSTANCE hInstance; /该窗口类的窗口过程所属的应用实例HICON hIcon; / 该窗口类所用的图标HCURSOR hCursor; / 该窗口类所用的光标HBRUSH hbrBackground; / 该窗口类所用的背景刷LPCSTR lpszMenuName; / 该窗口类所用的菜单资源LPCSTR lpszClassName; / 该窗口类的名称 WNDCLASSA;,3.8 窗口类的作用及其用法初步,struct tagWNDCLASSW / Unicode版

12、UINT style; / 窗口类的风格 WNDPROC lpfnWndProc; / 窗口函数(过程)int cbClsExtra; int cbWndExtra; HANDLE hInstance; /该窗口类的窗口过程所属的应用实例 HICON hIcon; / 该窗口类所用的图标 HCURSOR hCursor; / 该窗口类所用的光标 HBRUSH hbrBackground; / 该窗口类所用的背景刷 LPCWSTR lpszMenuName; / 该窗口类所用的菜单资源 LPCWSTR lpszClassName; / 该窗口类的名称 ;,3.8 窗口类的作用及其用法初步,ASC

13、II版本WNDCLASSA wndclass;Unicode版WNDCLASSW wndclass;综合版 / #define UNICODE / #define _UNICODE WNDCLASS wndclass;,练习 3,16位和 32位Windows 操作系统对应用程序的支持有什么不同? Windows应用程序的编译和C语言程序编译有什么不同? 资源描述文件的作用是什么?资源编译器的功能是什么? 资源文件与资源描述文件(.RC)的区别? 模块定义文件(.DEF)在编译中的作用? WINDOWS.H头文件的作用?WINDEF.H中定义了那些东西?WINNT.H头文件的作用? 项目文件的作用? 简述程序设计接口(API)的组成情况 讲讲匈牙利命名惯例的约定,还要记住那些习惯用法? 解释事件驱动程序的原理,并和过程式程序进行比较 何谓动态连接?何谓静态连接?动态连接库文件的后缀是什么? Win32里,微软设计者们又定义了一种新的调用规范,用什么符号表示? 介绍PASCAL调用规范,C调用规范(用_cdecl表示),_stdcall调用规范 W32中有那些识别字都定义成_stdcall 消息循环从应用程序消息队列取得窗口消息是怎样送給窗口消息处理程序?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报