传统windows编程补充.doc_第1页
传统windows编程补充.doc_第2页
传统windows编程补充.doc_第3页
传统windows编程补充.doc_第4页
传统windows编程补充.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

传统 Windows程序设计基础知识补充Windows是一个具有可视化图形用户界面的多任务的操作系统,它为用户提供了风格统一的由窗口、菜单、工具栏等界面元素所构成的多任务环境。这里介绍传统Windows编程的一些基础知识,作为实践教材2.1节的补充。1Windows操作系统介绍1.1 Windows操作系统的特点Windows之所以取得成功,主要在于它具有以下优点:l 直观、高效、统一的面向对象的图形用户界面,易学易用Windows应用程序大多符合IBM公司提出的CUA (Common User Acess)标准,所有的程序拥有相同的或相似的基本外观,包括窗口、菜单、工具条等。用户只要掌握其中一个,就不难学会其他软件,从而降低了用户培训学习的费用。从某种意义上说,Windows用户界面和开发环境都是面向对象的。采用“选择对象-操作对象”的方式进行工作。比如要打开一个文档,我们首先用鼠标或键盘选择该文档,然后从右键菜单中选择“打开”操作,打开该文档。这种操作方式模拟了现实世界的行为,易于理解、学习和使用。l 丰富的设备无关的图形操作Windows的另一特点是设备的无关性,即为Windows编写的应用程序可以运行于任何具有Windows设备驱动程序的硬件环境中。对于程序员来说,无需考虑不同硬件设备(如显示器、打印机或绘图仪等输出设备)的差异,只需当成输出设备使用进行编程。这是由图形设备接口GDI (Graphic Devices Interface)实现的。 GDI还提供丰富的图形操作函数,可以绘制出诸如线、圆、框等的几何图形,并支持各种输出设备。l 多任务多进程在MS-DOS环境下,同一时刻只能运行一个应用程序,键盘、显示器等系统设备由一个程序独占。Windows是多任务的操作系统,同一时刻可以运行多个应用程序,即所谓多进程。同时运行的进程间可以进行信息交互,系统资源由操作系统管理,为所有进程共享。 Windows规定每个程序只能在一个称为“窗口”屏幕矩形区域中进行显示输出,每个应用程序对应至少一个窗口。当运行多个应用程序时,屏幕上将产生多个应用程序窗口,但其中只有一个是活动窗口,当活动窗口拥有多个子窗口时,也只有一个子窗口是活动的。只有活动窗口才能有输入焦点,接受键盘与鼠标消息。在32位的Windows中,采用系统定时器将CPU时间按时间片方式,分配给系统中同时运行的多个进程,并且当前进程在其时间片未用完时可被更高优先级进程抢先使用CPU,称抢先式多任务系统。多个应用程序在不同时间片内拥有CPU,在用户看来,好像是多个应用程序在同时运行。1.2 Windows的内存管理在多进程模式操作系统中,必须保护每个进程的安全运行,防止被同时运行的其它进程所破坏,Windows系统采用虚拟内存提供这种保护。在Windows操作系统中有两种存储器概念:物理存储器和虚拟存储器。虚拟存储器不是真实的物理存储器,而是虚拟地址空间。Windows操作系统提供32位虚地址,因此每个进程的虚拟地址空间达4GB(bytes)。其中低端2GB(对Windows NT,可选3GB)为用户地址空间,而操作系统保留2GB(或对应为1GB)。虚拟内存系统的工作过程如下: 1当建立一个新进程时,操作系统赋予每个进程4GB的虚拟地址(不是内存)。 2虚拟内存管理器把应用程序的代码映射到应用程序的虚拟地址空间的某个位置,并把当前所需要的代码加载到物理内存。(虚拟地址与应用程序代码在物理内存中的位置无关) 3如果应用程序使用了动态链接库(DLL),则DLL被映射到进程的虚拟地址空间,并在需要时加载到物理内存。 4分配程序的数据和栈需要的空间,并映射到虚拟地址空间。 5应用程序使用虚拟地址空间中的地址开始执行,虚拟内存管理器把每个对虚拟内存的访问映射到物理内存。从开发人员的角度看,一个应用程序是在一个4GB大小的虚拟内存中运行,而不管它实际运行的物理内存有多大。至于虚拟内存怎样映射到物理内存,是由Windows操作系统的虚拟内存管理器在CPU的硬件支持下完成的。这样既保证了程序的健康运行,又简化了内存管理。强制使用虚拟内存允许操作系统在物理内存上严格分离各个进程,保护进程不受破坏;对于应用程序来说,4GB内存足够使用,无需考虑内存空间大小。2传统的Windows 程序设计Windows程序设计具有图形用户界面、多任务、多窗口等特点。Visual C+提供两套完整的Windows 程序开发系统,一种是直接使用Windows提供的API (Application Programming Interface 应用程序编程接口)函数,称为传统的wingdows程序设计;另一种是采用面向对象的方式,使用微软基础类库MFC (Microsoft Foundation Classes),称为标准的wingdows程序设计。2.1 Windows API简介Windows API是Windows 系统和Windows 应用程序间的标准接口,为应用程序提供Windows支持的函数定义、参数定义和消息格式等,总共有上千个Windows API 函数,可完成各种系统功能,如创建窗口、显示文字、显示一个信息窗口等。标准Win32 API 函数可以分为以下几类:1) 系统服务系统服务函数为应用程序提供了访问计算机资源与底层操作系统特性的手段,包括内存管理、文件系统、设备管理、进程和线程控制等。应用程序使用系统服务函数来管理和监视它所需要的资源。2) 通用控件库系统提供了一些通用控件,这些控件属于操作系统的一部分,可供所有的应用程序使用。使用通用控件有助于使应用程序的用户界面与其它应用程序保持一致,同时直接使用通用控件也可以节省开发时间。3) 图形设备接口图形设备接口GDI(Graphic Devices Interface)提供了一系列函数和相关的结构,可以绘制直线、曲线、闭合图形、文本以及位图图象等,应用程序可以使用它们在显示器、打印机或其他设备上生成图形化的输出结果。4) 网络服务网络服务可以使网络上不同计算机的应用程序之间进行通信,使用网络函数可以创建和管理网络连接,从而实现资源共享,例如共享网络打印机。5) 用户接口用户接口函数为应用程序提供了创建和管理用户界面的方法,可以使用这些函数创建和使用窗口来显示输出、提示用户进行输入以及完成其他一些与用户进行交互所需的工作。大多数应用程序都至少需要创建一个窗口。6) 系统外壳ShellWin32 API 中包含一些接口和函数,应用程序可使用它们来扩展系统外壳各方面的功能,如在资源管理器中提供各种快捷操作等。7) Windows 系统信息系统信息函数使应用程序能够确定计算机与桌面的有关信息,例如确定是否安装了鼠标,显示屏幕的工作模式等。Win32 API 是一个基于C 语言的接口和函数,但是Win32 API 中的函数可为使用不同语言编写的程序所调用,只要在调用时遵循调用规范即可。Windows 程序设计不同于控制台应用程序面向过程的特点,它必须符合Windows图形用户界面、多任务、多窗口等特点,学习Windows 程序设计,必须了解有关Windows 编程的一些概念。2.2 Windows程序设计的一些基本概念1. 窗口窗口是Windows程序的基本操作单元,是应用程序与用户之间进行交互的接口,也是系统管理应用程序的基本单位。编写应用程序其实就是创建一个或多个窗口,程序的执行过程是窗口内部、窗口与窗口之间以及窗口与系统之间进行数据交换与处理的过程。在winuser.h中定义了代表窗口的WNDCLASS结构类型。typedef struct tagWNDCLASS UINT style; / 窗口风格WNDPROC lpfnWndProc; / 指向窗口处理函数的函数指针Int cbClsExtra;/ 窗口结构中的预留字节数IntcbWndExtra; / 本窗口创建的其它窗口结构中预留字节数HINSTANCEhInstance;/ 注册该窗口类的实例句柄HICON hIcon;/ 代表该窗口类的图标句柄HCURSORhCursor; / 该窗口客户区鼠标光标句柄HBRUSHhbrBackGround; / 该窗口背景颜色句柄LPCSTRlpszMenuName;/ 指向窗口菜单名的字符指针LPCSTRlpszClassName;/ 指向窗口名的字符指针 WNDCLASS, *PWNDCLASS, NEAR *NPWNDCLASS, FAR *LPWNDCLASS;与窗口相关的概念还有窗口的标题栏、边框、菜单栏、系统菜单、最大最小化及关闭按钮、工具栏、状态栏、滚动条、图标、光标等。对话框也是一种窗口,其中包含的按钮、编辑框、静态文本等等,称为控件。控件也是一种窗口,一般作为对话框的子窗口。2. 事件与消息Windows程序设计是面向事件的。在Windows环境下,应用程序启动后,系统等待用户在图形用户界面内的输入选择,如鼠标按键、键盘按键、窗口被创建、关闭、改变大小、移动等,在Windows看来,这些都是事件。只要有事件发生,系统即产生特定的消息,驱动相应的处理函数进行处理,因此Windows 应用程序也称为事件驱动程序。消息描述了事件的类别,包含了相关信息,Windows应用程序利用消息与系统及其它应用程序进行信息交换。由于windows事件的发生是随机的,程序的执行先后顺序也无法预测,系统采用消息队列来存放事件发生的消息,然后从消息队列中依次取出消息进行相应的处理。在winuser.h中,消息结构的定义如下:typedef struct tagMSG HWND hWnd;/指定消息发向的窗口句柄UINTmessage;/标识消息的消息值WPARAMwParam;/消息参数LPARAMlParam;/消息参数DWORDtime;/消息进入队列的时间POINTpt;/消息进入队列时鼠标指针的屏幕坐标MSG,*PMSG,NEAR *NPMSG, FAR * LPMSG;下面介绍消息结构中各个成员的意义。a) message是标识消息的消息值或消息名。每个消息都有唯一的一个数值标识,常用不同前缀的符号常量以示区别。例如,WM_表示窗口消息,BM_表示按钮控件消息,EM_表示编辑框控件消息,LB_表示列表框控件消息等等。下面是Windows常用的窗口消息和消息值定义,定义于winuser.h中:#define WM_CREATE0X0001/创建窗口产生的消息#define WM_DESTROY0X0002/撤销窗口产生的消息#define WM_PAINT0X000F/重画窗口产生的消息#define WM_CLOSE0X0010/关闭窗口产生的消息#define WM_CHAR0X0102/按下非系统键产生的字符消息#define WM_USER0X0400/用户自定义消息WM_USER为用户自定义消息,用户可用WM_USER+n定义程序中需要的消息。b) wParam和lParam都是32位消息参数,其数据类型在windef.h中定义如下:typedef UINTWPARAM;typedef LONGLPARAM;其含义和数值依不同消息而不同,处理消息时常常要根据消息参数的含义进行相应处理。消息参数包含很多信息,但应用时并不一定需要所有信息,程序中可根据需要读取相关信息进行处理。c) pt表示消息进入消息队列时鼠标指针的屏幕坐标,POINT是定义在windef.h中的结构体,表示屏幕上一个点:typedef struct tagPOINT LONG x;/表示点的屏幕横坐标LONGy;/表示点的屏幕纵坐标POINT, PPOINT,NEAR *NPPOINT,FAR *LPPOINT; 3. 资源共享DOS程序在运行时独占系统的全部资源,包括显示器、内存等,直到程序结束时才释放资源。而Windows是一个多任务的操作系统,各个应用程序共享系统提供的资源,常见的资源包括:设备上下文,画刷,画笔,字体,对话框控制,对话框,图标,定时器,插入符号,通信端口,电话线等。Windows要求应用程序以一种能共享资源的方式进行设计,其基本模式是这样的:1) 向Windows系统请求资源;2) 使用该资源;3) 释放该资源给Windows以供其它程序使用。最容易忽略的是第三步,如果忽略了这一步,会出现程序运行出现异常情况,或干扰其它程序正常运行,甚至造成立即死机(如设备上下文没有释放时)。CPU也是一种重要的资源,应用程序应避免长时间占用CPU资源(如一个特别长的循环);如果确实需要这样做,也应当采取一些措施,使程序能够响应用户的输入。主存也是一个共享资源,要防止同时运行的多个应用程序因协调不好而耗尽内存资源。4. 数据类型Windows程序中用到很多数据类型,包括简单类型和结构类型,常用数据类型说明如表2.2。表2.2 Windows数据类型数据类型说 明BYTE8位无符号字符BSTR32位字符指针COLORREF32位整数,表示一个颜色WORD16位无符号整数LONG32位有符号整数DWORD32位无符号整数,是WORD的两倍长度UINT32位无符号整数BOOL布尔值,值为TRUE或FALSEHANDLE句柄LPSTR32位指针,指向字符LPCSTR32位指针,指向字符串常量LPTSTR32位指针,指向字符串,此字符串可移植到Unicode和DBCS双字符集LPCTSTR32位指针,指向字符串常量,此字符串可移植到Unicode和DBCS双字符集LPVOID32位指针,可指向任何类型数据LPRESULT32位数值,作为窗口函数或CALLBACK函数的返回类型WNDPROC32位指针,指向一个窗口函数LPARAM32位数值,作为窗口函数和CALLBACK函数的参数WPARAM作为窗口函数和CALLBACK函数的参数,在win 16中是16位,在win 32中是32位2.3 传统Windows 程序结构 在进行Windows程序设计之前,有必要了解Windows应用程序的构成及程序与用户是如何通信的。1. Windows应用程序的构成及创建构成Windows程序的基本元素包括程序代码、用户界面资源和动态链接库(dynamic-link library)库。 程序代码主要由可执行代码构成,Windows程序要求有两个函数,一个是WinMain,为操作系统提供入口,另一个是窗口处理函数WndProc,对来自系统的消息进行处理。资源是应用程序能够使用的一类预定义工具,用户界面资源是应用程序定义的图形用户接口GUI(graphical user interface),如菜单、对话框、按钮等。当应用程序运行时,资源并不随程序代码一起装入内存,而是在实际用到时才装入内存中属于它们自己的数据段,这样可以降低内存需求,也便于统一管理和重复利用公共资源。不过资源只是定义了用户界面的外观和组织,没有定义其功能特性。例如,编辑一个对话框资源,可以定义对话框的外观,却不能定义应用程序响应对话框控制的方式。这些功能的定义要通过编程实现,表2.3列出了常用资源。资 源 类 型 说 明快捷键(Accelerator)位图(Bitmap)对话框(Dialogbox)存储击键和命令组合包括Windows匹配格式的图形对话框控件细节、布局、属性图标(Icon)菜单(Menu)字符串表(String table)工具栏(Toolbar)存储图标用位图组菜单和菜单组文本和布局细节存字符串和相关标识符(ID)值工具栏布局细节和画按钮所

温馨提示

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

评论

0/150

提交评论