《Windows应用程序》PPT课件.ppt_第1页
《Windows应用程序》PPT课件.ppt_第2页
《Windows应用程序》PPT课件.ppt_第3页
《Windows应用程序》PPT课件.ppt_第4页
《Windows应用程序》PPT课件.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 Windows应用程序,主要内容 Windows编程基础知识 Windows应用程序的基本结构 作业:3-2,3-5 ,上机创建一个Windows应用程序基本结构(窗口),Windows编程的几个常用名词 用VC编写windows程序有两种方式 windows c方式,SDK编程,直接调用Windows的API进行编程 C+方式,对SDK函数进行包装,如VC中的MFC、BCB中的VCL。 学VC最好是先学用SDK编写程序,在掌握Windows操作系统的工作原理和各API函数的应用,然后再深入MFC。 Windows SKD与API Windows SDK (Windows Softwa

2、re Development Kit, Windows软件开发工具包) ,包括windows函数和常数定义、API函数说明文档、相关工具和示例。 WIN32 SDK是基于WIN32 API编程的工具,在安装Visual C+ 时WIN32 SDK 同时被安装上。 API(Application Programming Interface,应用编程接口),是操作系统留给应用程序的一个调用接口,应用程序通过调用API使操作系统去执行应用程序的命令。API由上千个API函数组成(win95中有两千多个) 。 MFC是API的封装,结合面向对象的继承、多态组成的类,共有一百多个类组成。 SDK与API

3、关系密切,使用API编程也称“SDK 编程”。API和SDK是开发Windows 应用程序(包括其它编程框架和类库MFC)的基础,MFC虽然比SDK编程有更高的抽象度,但在需要时可直接调用API函数 。,SDK的主要组成部分 在线帮助,描述Windows编程用到的函数、消息、结构、宏及其他资源。 各种编程工具,如对话框编辑器及图像编辑器等。 Windows库及头文件。 C语言编译系统,使用C语言编写Windows应用程序。 变量、函数的匈牙利命名规 indows中变量、函数的命名规则,Mcrosoft采用匈牙利命名法。匈牙利命名法是由Mcrosoft的著名开发人员,Excel的主要设计者查尔斯

4、西蒙尼(国籍是匈牙利)在他的博士论文中提出来的。 匈牙利命名法的规则: 变量、函数的名字以一个或者多个小写字母开头,用这些字母来指定数据类型。(见下页) 名字前缀后是一个或多个第一个字母大写的单词,单词指出了对象的用途。 例:m_szStudentName 表示一个学生名字的类成员变量,数据类型是字符串型。,标准前缀的数据类型 前缀 类型 b BOOL/(integer)布尔型 by BYTE/(unsigned character)字符型或无符号字符型 c (ctaracter)字符型,短整型 dw DWORD/(unsigned long)双字,或无符号长整型 fn (function)函

5、数 h HANDLE(unsigned long)句柄 i (integer)整型 l LONG/(long)长整型 lP LONG/(far) pointer 长整型,远指针 n short integer短整型 np short /(near)pointer 短整型,近指针 p pointer指针 s string,字符串 z ASCII字符串(以NULL或0结尾) w WORD(unsigned)无符号整型 x short短整型,用作X坐标 y short短整型,用作Y坐标 m_ 类成员变量 sz 以0结尾的字符串,31 Windows编程基础知识 1.Windows编程的特点 () 用

6、户界面的一致性 用户界面使用Windows内部例程构造菜单和对话框,每一个窗口都包含了相同的基本特性(窗口结构类似),这些基本特性在应用程序中是一致的,因而用户能很容易地适应新的应用程序。 ()用基于图形的图标来代表应用程序和数据 采用图形图像来代表文件、应用程序、窗口和目录等物理数据结构。用户可以通过鼠标的单击、双击及拖动等操作来管理这些物理结构。 () 多窗口、多任务功能 Windows允许同时运行几个应用程序,用户无需退出一个应用程序再进入另一个应用程序,而只需简单地在各个应用程序之间来回切换。多个任务多个窗口,一个应用程序占用一个窗口,切换任务可以在窗口间转换。 ()独立于设备的图形开

7、发能力 Windows提供了丰富的内部例程,程序员可以直接使用菜单、对话框等组件构造友好界面。应用程序并不对硬件直接存取控制,程序员可以用一种与设备无关的方式来处理显示器、适配卡、键盘、打印机、系统定时器和通信接口等,不需要设计设备驱动程序,2. API函数和MFC类库 (1)Windows应用程序编程接口API (Application Programming Interface)或称为Windows应用程序界面 (也称为编程环境),应用API编程效率高、自由度大。 API函数的核心组件和功能(Win16/Win32): USER.EXE/USER32.DLL:负责用户界面和窗口消息的传递

8、GDI.EXE/GDI32.DLL:实现与设备无关的图形操作功能。 KERNEL.EXE/KERNEL32.DLL:负责内存管理、加载、执行、调度程序及规划等。 (2)MFC类库(Microsoft Foundation Class) MFC类库集成了大量已经预先定义好的类(调用API提供的基类接口),用户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。 MFC与API编程有许多共同之外,因MFC隐藏了大量SDK编程的复杂考虑(封装了API的细节),使用更方便。 Windows操作系统是用C+编写的,用Visual C+生成的代码短小、快速、高效,是驱动程序、动态链接库的强大编程工具

9、。,3. Windows编程的几个基本概念 (1)窗口 窗口是Windows应用程序基本操作的单元,是应用程序与用户交互的接口环境,也是系统管理应用程序的基本单位。 窗口是一个接收和处理消息的对象,也是一个虚拟屏幕。用户的键盘、鼠标都送到该窗口中处理,输出文本或绘图也限制在窗口中。 Windows应用程序可创建一个或多个窗口,在窗口中编写窗口过程。应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。 (2)事件驱动 Windows程序是由事件或消息产生驱动处理过程:每一个事件的发生,将在对应的消息队列中放一条消息,消息循环系统捕获消息去处理。 消息是描述

10、事件发生的信息,如:按下鼠标键时,系统就会产生一条鼠标按键事件。Windows程序的执行顺序取决于事件发生的顺序。 (3)句柄 句柄(handle)是应用程序标识一个对象(如:窗口、菜单、实例等)的唯一表值(4字节整数索引值),应用程序通过句柄可以访问到对象。 实例句柄,实例是程序加载运行的备份,系统为实例分配的句柄。 常用部分句柄类型(表3-l),(4)消息结构MSG的类型定义 MSG在头文件windows.h中,格式如下: typedef struct tagMSG /在C中定义一个结构体类型要用typedef, MSG /是struct tagMSG的别名。 HWND hwnd; /消息

11、接收的窗口句柄 UINT message; /消息编号,用以标识消息 WPARAM wParam;/消息附加信息,16位的消息参数 LPARAM lParam;/消息附加信息,32位的消息参数 DWORD time; /消息被放入消息队列时的时间 POINT Pt; /消息被放入消息队列的光标位置 MSG;/结构别名:MSG ,为以后应用使用。 消息(message)的主要信息: 窗口句柄:因所有消息都发往窗口,提供消息发往的窗口索引 消息号:由事先定义好的消息名标识,表示消息类型; 字参数(wParam)和长字参数(lParam):提供消息的附加信息(关键信息)。 message 标识不同消

12、息(值),以“WM”前缀开头,各类消息标识的定义在头文件Windows.h中。 例,选择采单项(一种命令)时将会产生消息WMCOMMAND。 time 消息被放入消息队列的时间; Pt 消息被放入队列时鼠标的位置,仅供Windows系统使用,不传给窗口函数WndProc。它是POINT结构变量。,POINT结构的类型定义格式 POINT结构的类型定义在头文件windows.h中: typedef struct tagPOINT int x; /x坐标值 int y; /y坐标值 POINT; 消息宏(标识)的常用前缀(P42) 系统定义的消息分类,不同的前缀符号经常用于消息宏识别: BM表示按

13、钮控件消息。 CB表示组合框控件消息。 DM表示默认下压式按钮控件消息。 EM表示编辑控件消息。 LB表示列表框控件消息。 SBM表示滚动条控件消息。 WM表示窗口消息。,32 Windows应用程序常用消息(在相关内容中介绍) 33 Windows中的事件驱动程序设计 DOS下程序设计使用过程驱动的方法,程序按规定好的步骤操作。 Windows程序设计用事件驱动方法,程序是处理发生消息的过程。 34 Windows应用程序的基本结构 341 windows应用程序的常用构成文件 windows应用程序常用的文件类 扩展名 文件类型 .c或.cpp c或C+源程序文件 .h 头文件,包含外部常

14、量、变量、数据结构和函数定义和说明等 .rc 资源描述文件,定义源程序使用的资源 .dsw 项目工作区文件,级别最高,点击它可打开一个项目。它包含了源文件清单、编译/连接选择、路径等设置。 .dsp 项目文件 .opt 存放dsw文件中要用到的本地计算机有关配置信息,文件不能在不同计算机上共享。,3.4.2 应用源程序的基本构成(框架),Windows应用程序,创建窗口类,注册窗口类,创建窗口,显示窗口,消息循环,窗口函数1,窗口函数n,入口函数WinMain,应用程序队列1,应用程序队列n,消息n,系统消息队列,Windows应用程序的基本结构,以窗口为基础,由入口函数WinMain、窗口函

15、数WndProc(窗口处理函数或窗口过程)等组成 。 1WinMain函数的主要功能结构 WinMain是Windows应用程序的入口,类似C中的main函数,其功能是被系统调用。 WinMain的主要结构: 变量定义、初始化 创建窗口类、注册窗口类:定义窗口的总体特征 创建窗口:定义窗口的细节 消息循环:检测应用程序消息队列是否有消息,若收到消息,调对应的处理过程。 当消息循环检索到WM_QUIT消息时,终止程序运行。,(1) WinMain函数原型说明 int WINAPI WinMain (HINSTANCE hThisInst, /应用程序当前实例句柄 HINSTANCE hPrevI

16、nst, /应用程序其他实例句柄 LPSTR lpszCmdLine, /指向程序命令行参数的指针 Int nCmdShow ) /应用程序开始执行时窗口显示方式的整数值标识 启动应用程序时,Windows把四个参数通过启动代码间接地传给WinMain函数,并自动赋上当前实例句柄给hThisInst 。 WINAPI,在windef.h中定义的宏,在Win32中WINAPI被定义为FAR PASCAL,用来指示WinMain的参数入栈次序:括号内左边的参数先入栈,右边的参数后入栈。 hThisInst 。每执行一次应用程序 (instance),都使用一个实例句柄。 hPrevInst, 先前

17、的实例句柄。同一个程序打开两次,出现两个窗口,第一次打开的窗口就是先前实例的窗口。对于一个32位程序,该参数总为NULL。 lpszCmdLine。是一个以空终止的字符串,指定传递给应用程序的命令行参数。如系统将某个文本文件中的字符串作为命令行参数传给WinMain函数,以实现在windows下的操作。,nCmdShow:指明窗口如何显示。该参数可以是下列值之一: SW_HIDE:隐藏窗口并且激活另外一个窗口。 SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。 SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与S

18、W_SHOWNORMAL相同)。 SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。 SW_SHOWMAXIMIZED:激活窗口并且将其最大化。 SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。 SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。 SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。 SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。 SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE

19、相同)。,(2)初始化 窗口类的定义、注册、创建窗口实例和显示窗口。可先定义一些与其相关的变量。 定义变量 先定义窗口句柄变量、消息结构变量、窗口类的结构变量等: HWND hwnd ; / HWND为窗口句柄类, hwnd为窗口句柄变量名 MSG Msg ; / MSG为消息结构,msg为消息结构变量名 WNDCLASS wndclass ; / WNDCLASS为窗口类的结构, /wndclassc为窗口类结构变量名 char lpszClassName = “窗口”;/窗口类名 char lpszTitle= “My_Windows”;/窗口标题名,窗口类及预定义 在Windows.h中

20、的WNDCLASS结构定义: typedef struct tagWNDCLASS UINT style;/窗口类风格 WNDPROC lpfnWndProc;/窗口处理函数指针 int cbClsExtra;/窗口类附加数据 int cbWndExtra;/窗口附加数据 HANDLE hInstance;/ 当前实例句柄 HICON hIcon; /窗口的最小化图标 HCURSOR hCursor ;/窗口内光标 HBRUSH hbrBackground ; /窗口背景色 LPSTR lpszMenuName;/窗口中菜单指针 LPSTR lpszClassName;/窗口类名 WNDCLA

21、SS; 窗口类风格(style)值: 标识值 意义 CS_BYTEALIGNCLIENT 水平方向将窗口的客户区与字边界对齐 CS_BYTEALIGNWINDOW 水平方向将窗口与字边界对齐 CS_CLASSDC 向窗口类赋显示环境,各窗口共享 CS_DBCLKS 向窗口发鼠标双击消息 CS_GLOBALCLASS 定义全局窗口类 CS_HREDRAW 窗口水平大小变化后重画窗口 CS_VREDRAW 窗口垂直大小变化后重画窗口,窗口类预定义实例 给窗口变量wndclass赋值,完成窗口的形式与功能的定义: wndclass.style = 0;/窗口类型为缺省类型 wndclass.lpfn

22、WndProc = WndProc ; /窗口处理函数为WndProc wndclass.cbClsExtra= 0 ;/窗口类无扩展 wndclass.cbWndExtra= 0 ;/窗口实例无扩展 wndclass.hInstance = hInstance ;/当前实例句柄 wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ; /P46,函数LoadIcon为加载一个窗口图标(左上角的标志), NULL为系统预定义的, IDI_APPLICATION为缺省图标(表7-10)。 wndclass.hCursor = LoadCursor(

23、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 ; /窗口类名为“窗口”,每个应用程序都有窗口类,为

24、创建窗口用。,注册窗口类 预定义的窗口类必须注册才能使用。窗口类的注册函数: RegisterClass(/不使用该值,显示窗口 由ShowWindow 和UpdateWindow 函数实现。 显示窗口(除客户区)函数ShowWindow(hwnd,nCmdShow) hwnd 创建窗口的句柄; nCmdShow 指定窗口初显的形式(表3-6),不显示客户区。 绘制窗口客户区函数UpdateWindow(hwnd) 调用函数UpdateWindow,产生WM_PAINT消息,更新(重绘)客户区。 消息循环 消息循环机制 窗口工作后,Window监视所有设备,若有消息,将消息放入系统消息队列,再

25、复制到相应的应用程序消息队列中,通过消息循环检测消息,并将每一个消息发送给相应窗口函数中。 消息循环的函数 MSGMsg;/消息变量,在前面定义 while(GetMessage(Msg,NULL,0,0) TranslateMessage(Msg); DispatchMessage(Msg); return msg.wParam;,函数GetMessage 从消息应用程序队列中读取一个消息,并将消息放在为窗口指定的消息结构变量Msg中。 函数GetMessage的原形声明: GetMessage (lpMSG, /指向MSG结构变量的指针 hwnd,/窗口句柄,用于检测该窗口的消息 nMsg

26、FilteMin, /用于消息过滤的最小消息号值 nMsgFilterMax )/用于消息过滤的最大消息号值 函数TranslateMessage 将虚拟键(键入)消息转为ASCII码字符消息(WM_CHAR),其原形声明: TranslateMessage(lpMSG) 函数DispatchMessage 将lpMSG指向的消息,传送到对应窗口函数(过程),其原形声明: DispatchMessage(lpMSG),当GetMessage函数返回零值,即检索到WM_QUIT消息,结束循环并退出。 return Msg.wParam; /有消息时,返回Msg中的附加信息(wParam) 2窗口

27、函数(过程) 窗口函数,定义不同消息响应的处理过程。 根据消息转向程序 窗口函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,窗口函数的一般形式 LRESULT CALLBACK WndProc (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) switch(message) case break; case WM_DESTROY: PostQuitMessage(0);/调用PostQuitMessage发出WM_QUIT消息 default: /采用系统消息默认处理函数 return DefWindowProc(hwnd,message,wParam,lParam); return (0); ,WMDESTROY消息 当在系统菜单选择菜单项“关闭”(Close)结束程序时,发出这个消息。 Case WM_DESTROY: PostQuitMessage(0); break; WMDESTROY消息,主要使程序做清理工作,然后再关闭。对话框要求用户确认是否关闭,确认关闭时,将保存一些文件。 PostQuitMessage(0)函数,将把WMQUIT消息放入应用程序的稍息队列,终止WinMain函数的消息处理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论