第1讲Windows程序设计基础_第1页
第1讲Windows程序设计基础_第2页
第1讲Windows程序设计基础_第3页
第1讲Windows程序设计基础_第4页
第1讲Windows程序设计基础_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机窗口技术基础第一讲Windows程序设计基础12Windows程序设计基础程序设计基础 vWindows系统是一个基于视窗的消息驱动系统,即使功能系统是一个基于视窗的消息驱动系统,即使功能大异的大异的Windows程序都有比较规范统一的程序界面,如窗程序都有比较规范统一的程序界面,如窗口、菜单、工具条、对话框等。口、菜单、工具条、对话框等。 Windows程序的设计其实程序的设计其实比较规范,但若不了解比较规范,但若不了解Windows程序的基本结构,程序调程序的基本结构,程序调度的基本方法(即消息驱动的基本原理),以及每个程序都度的基本方法(即消息驱动的基本原理),以及每个程序都会用到

2、的基本数据结构,也很难编写出有用的会用到的基本数据结构,也很难编写出有用的Windows程程序来。序来。v之所以在本章介绍之所以在本章介绍API程序,就是基于上述考虑而设计的,程序,就是基于上述考虑而设计的,尽管尽管API程序设计在实际编程过程中已越来越少用了,但它程序设计在实际编程过程中已越来越少用了,但它却是理解却是理解Windows程序设计基本原理的最佳捷径,因为所程序设计基本原理的最佳捷径,因为所有有Windows程序的结构和执行过程最终大同于程序的结构和执行过程最终大同于API程序。在程序。在此基础上学习此基础上学习MFC及其它在及其它在Windows程序设计语言如程序设计语言如JA

3、VA,都是大有帮助的!,都是大有帮助的!31.Windows程序设计基础程序设计基础1.Windows系统的特点系统的特点v标准的用户界面标准的用户界面v多任务多任务v设备独立性设备独立性v动态链接动态链接v强大的内存管理强大的内存管理41 Windows程序设计基础程序设计基础2. 基本术语基本术语窗口(窗口(Window)由句柄唯一标识)由句柄唯一标识对话框(对话框(Dialog)人机交互)人机交互图标(图标(Icon)代表某一项操作或程序的图符)代表某一项操作或程序的图符位图(位图(Bitmap)用位模式形成的图像)用位模式形成的图像菜单(菜单(Menu)命令)命令工具栏(工具栏(Too

4、lBar)常用的菜单项)常用的菜单项状态栏(状态栏(StateBar)操作状态或操作提示)操作状态或操作提示51.1 窗口窗口窗口是Windows程序的基本单元,Windows程序的运行过程就是窗口内部、窗口之间及窗口与用户之间的信息交换过程。窗口通常包括菜单、工具条、滚动条、状态栏、命令按钮、对话框等元素。 61.2 事件驱动和消息响应事件驱动和消息响应1. 事件事件事件是指人们应用计算机的过程中发生的操作,如事件是指人们应用计算机的过程中发生的操作,如按下键盘上的某个按键、移动鼠标、单击鼠标左键、按下键盘上的某个按键、移动鼠标、单击鼠标左键、移动窗口及选择程序菜单等操作都是事件。移动窗口及

5、选择程序菜单等操作都是事件。2、事件驱动、事件驱动每发生一个事件,就会产生一个与之对应的特定消每发生一个事件,就会产生一个与之对应的特定消息,该消息会被息,该消息会被Windows系统捕获,然后将通过此系统捕获,然后将通过此消息调用执行与之对应的程序代码,实现相应的程消息调用执行与之对应的程序代码,实现相应的程序功能。序功能。因为从事件发生到相应程序代码被调用执行都是通因为从事件发生到相应程序代码被调用执行都是通过消息来实现的,因此事件驱动也常被称为消息驱过消息来实现的,因此事件驱动也常被称为消息驱动动71.2 事件驱动和消息响应事件驱动和消息响应3、消息队列、消息队列用于存放消息的队列,消息

6、系统由用于存放消息的队列,消息系统由Windows系统自动建立和维护。系统自动建立和维护。Windows消息队列的类型消息队列的类型v系统消息队列:由系统消息队列:由Windows系统维护管理的消系统维护管理的消息队列,每当有消息发生时,该消息将首先被存息队列,每当有消息发生时,该消息将首先被存入系统消息队列。入系统消息队列。v应用程序消息队列:应用程序消息队列:Windows系统会为每个应系统会为每个应用程序建立一个独立的消息队列,用于存放该应用程序建立一个独立的消息队列,用于存放该应用程序的消息。用程序的消息。81.2 事件驱动和消息响应事件驱动和消息响应4、消息循环、消息循环每个应用程序

7、都有一个循环机构,该循环机构则不每个应用程序都有一个循环机构,该循环机构则不断地重复查看程序自身的消息队列,如果队列中断地重复查看程序自身的消息队列,如果队列中有消息,就将其取出并执行相应的消息处理代码,有消息,就将其取出并执行相应的消息处理代码,这个处理消息的循环机构称为消息循环。这个处理消息的循环机构称为消息循环。 91.2 事件驱动和消息响应事件驱动和消息响应5、Windows程序调度的基本原理程序调度的基本原理每个每个Windows程序启动后,就等待用户在其窗口中程序启动后,就等待用户在其窗口中进行操作。每个操作会引发一个事件,就会产生一进行操作。每个操作会引发一个事件,就会产生一个与

8、之对应的特定消息。该消息会被个与之对应的特定消息。该消息会被Windows系统系统捕获。捕获。Windows系统对捕获的消息进行分析后,会系统对捕获的消息进行分析后,会将消息传递给产生它的应用程序的消息队列,每个将消息传递给产生它的应用程序的消息队列,每个应用程序的消息循环机构不断地重复查看它自已的应用程序的消息循环机构不断地重复查看它自已的消息队列,如果队列中有消息,就将其取出并执行消息队列,如果队列中有消息,就将其取出并执行相应的消息处理代码,相应的消息处理代码, 如果队列中没有消息就等待,当队列中有消息时就又处理它,如此循环往复,直至程序结束。101.2 事件驱动和消息响应事件驱动和消息

9、响应6、事件驱动及消息循环的基本原理111.2 事件驱动和消息响应事件驱动和消息响应7、DOS和Windows程序执行方式对比121.3 Windows程序的构成1、Windows程序的组成程序的组成v程序代码程序代码程序代码是程序的主体,用于实现程序的功能程序代码是程序的主体,用于实现程序的功能v资源资源Windows程序具有标准规范的应用程序界面,每个程序具有标准规范的应用程序界面,每个Windows程程序常常包含了许多相同的组成元素,如菜单、对话框、工具栏、序常常包含了许多相同的组成元素,如菜单、对话框、工具栏、应用程序图标、鼠标光标、程序版本信息等,这些组成元素被应用程序图标、鼠标光标

10、、程序版本信息等,这些组成元素被Windows从程序代码中独立出来,并以各种不同扩展名的文件从程序代码中独立出来,并以各种不同扩展名的文件形式存在,如形式存在,如.ico(图标)、(图标)、.bmp(位图)、(位图)、.cur(光标)等,(光标)等,Windows系统称之为资源系统称之为资源 资源则可以在需要时才通过相关命令资源则可以在需要时才通过相关命令加载加载到程序中。到程序中。13.libC runtimeDll import.RC资源编译器资源编译器.DLGDialog Editor*.obj*.exe.res.DEF资源连接器资源连接器Image EditorFont Editor.

11、BMP.ICO.CUR.FON.h.c/cppc编译器编译器2、Window程序的编译链接过程141.4 VC+的的Windows程序设计方法程序设计方法1API程序设计程序设计API即即Application Programming Interface(应用(应用程序编程接口),它是程序编程接口),它是Windows操作系统和操作系统和Windows应用程序之间的标准接口,在应用程序中应用程序之间的标准接口,在应用程序中可以通过可以通过API访问访问Windows提供的各种函数、宏及提供的各种函数、宏及数据结构。数据结构。API函数保存在一些动态链接库中,每个函数保存在一些动态链接库中,每个

12、Windows程序都要用到的动态链接库有程序都要用到的动态链接库有USER32.Dll、GDI32.Dll、KERNEL32.Dll。API程序设计就是直接利用程序设计就是直接利用Windows系统提供的系统提供的API函数,编写能够在函数,编写能够在Windows系统中运行的程序。系统中运行的程序。151.4 VC+的的Windows程序设计方法程序设计方法2MFC程序设计程序设计MFC是是Microsoft Foundation Classes的缩写,的缩写,即微软基础类库。即微软基础类库。MFC是建立在是建立在API基础上的基础上的C+类库,它对类库,它对Windows提供的提供的API

13、函数、数据结构、函数、数据结构、各种控件按功能进行了分类,利用面向对象技术将各种控件按功能进行了分类,利用面向对象技术将它们封装在不同的类中,并通过继承将这些类组织它们封装在不同的类中,并通过继承将这些类组织在一起。在一起。MFC不仅把不仅把API函数封装成了易于使用的类,而且函数封装成了易于使用的类,而且还提供了建立还提供了建立Windows应用程序的框架结构,以及应用程序的框架结构,以及建立应用程序的各种组件,简化了建立应用程序的各种组件,简化了Windows程序设程序设计的难度。计的难度。 1.4 VC+的的Windows程序设计方法程序设计方法3其他桌面编程方法及语言简要介绍其他桌面编

14、程方法及语言简要介绍DELPHI:是Windows平台下著名的快速应用程序开发工具(Rapid Application Development,简称RAD)。它的前身,即是DOS时代盛行一时的“BorlandTurbo Pascal”,最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为Anders Hejlsberg。经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一

15、个以面向对象程序设计为中心的应用程序开发工具1.4 VC+的的Windows程序设计方法程序设计方法 “真正的程序员用VC,聪明的程序员用Delphi”。和VC相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色;和VB相比,Delphi则功能更强大、更实用。可以说Delphi同时兼备了VC功能强大和VB简单易学的特点。 Delphi具有以下特性:基于窗体和面向对象的方法,高速的编译器,强大的数据库支持,与Windows编程紧密结合,强大而成熟的组件技术。但最重要的还是Object Pascal语言,它才是一切的根本。Object Pascal语言是在Pascal语言的基础上发展起来的

16、,简单易学。1.4 VC+的的Windows程序设计方法程序设计方法(1)直接编译生成可执行代码,编译速度快。由于Delphi编译器采用了条件编译和选择链接技术,使用它生成的可执行程序更加精炼,运行速度更快。(2)提供了许多快速方便的开发方法,使开发人员能用尽可能少的重复性工作完成各种不同的应用。利用项目模板和专家生成器可以很快建立项目的构架,然后根据用户的实际需要逐步完善。(3)具有可重用性和可扩展性。开发人员不必再对诸如标签、按钮及对话框等Windows的常见部件进行编程。Delphi包含许多可以重复使用的部件,允许用户控制Windows的开发效果。(4)具有强大的数据存取功能。(5)拥有

17、强大的网络开发能力,能够快速的开发B/S应用,它内置的IntraWeb和ExpressWeb使得对于网络的开发效率超过了其他任何的开发工具。1.4 VC+的的Windows程序设计方法程序设计方法(7)Delphi使用独特的VCL类库,使得编写出的程序显得条理清晰,VCL是现在最优秀的类库,它使得Delphi在软件开发行业处于一个绝对领先的地位。(8)从Delphi8开始Delphi也支持.Net框架下程序开发1.4 VC+的的Windows程序设计方法程序设计方法3其他桌面编程方法及语言简要介绍其他桌面编程方法及语言简要介绍C+Builder:C+ Builder是由Borland公司推出的

18、一款可视化集成开发工具。C+ Builder具有快速的可视化开发环境:只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面;C+ Builder内置了100多个完全封装了Windows公用特性且具有完全可扩展性(包括全面支持ActiveX控件)的可重用控件;C+ Builder具有一个专业C+开发环境所能提供的全部功能:快速、高效、灵活的编译器优化,逐步连接,CPU透视,命令行工具等。它实现了可视化的编程环境和功能强大的编程语言(C+)的完美结合。1.4 VC+的的Windows程序设计方法程序设计方法 C+ Build

19、er优化的32位原码(Native Code)编译器建立在Borland公司久经考验的编译技术基础之上,提供了高度安全性、可靠性、快速性的编译优化方法,完全编译出原始机器码而非中间码,软件执行速度大大提高。在编译和连接过程中,C+ Builder自动忽略未被修改的原代码和没有使用的函数,从而大大提高了编译和连接速度。C+ Builder的CPU透视工具包括五个独立的小面板,可以对正在运行程序从内部进行深层次的了解。另外C+ Builder还提供了一个专业开发环境所必需的命令行工具,以帮助建立C+程序或者准备编译和连接的程序进行更精细的控制。1.4 VC+的的Windows程序设计方法程序设计方

20、法3其他桌面编程方法及语言简要介绍其他桌面编程方法及语言简要介绍VisualBasic:Visual Basic是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。 1.4 VC+的的Windows程序设计方法程序设计方法缺点:缺点:1.属于解释型语言,可执行程序中

21、包含的并非是机器属于解释型语言,可执行程序中包含的并非是机器码,因此需要码,因此需要VB运行库的解释执行,边解释边执行,运行库的解释执行,边解释边执行,因此执行效率较慢,不适宜快速反应的硬件底层控制因此执行效率较慢,不适宜快速反应的硬件底层控制软件设计。软件设计。2. Visual Basic 语言具有不支持继承不支持继承、无原生支持无原生支持多线程、异常处理不完善等三项明显缺点。3.无法学到良好的编程习惯,不利于培养良好的编程无法学到良好的编程习惯,不利于培养良好的编程习惯,无视程序设计技术和结构。习惯,无视程序设计技术和结构。优点:优点:1.开发快速简便,上手快。开发快速简便,上手快。2.

22、界面编程极为迅速。界面编程极为迅速。1.4 VC+的的Windows程序设计方法程序设计方法3其他桌面编程方法及语言简要介绍其他桌面编程方法及语言简要介绍QT:Qt是1991年奇趣科技开发的一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。 1.4 VC+的的Windows程序设计方法程序设计方法vQt支持下述平台:vMS/Windo

23、ws - 95、98、NT 4.0、ME、2000、XP 、 Vista和Win7vUnix/X11 - Linux、Sun Solaris、HP-UX、CompaqTru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS和其它很多X11平台vMacintosh - Mac OS XvEmbedded - 有帧缓冲(framebuffer)支持的嵌入式Linux平台,Windows CEvAndroid1.4 VC+的的Windows程序设计方法程序设计方法3其他桌面编程方法及语言简要介绍其他桌面编程方法及语言简要介绍vVisual C#:是微软开发的一种面向对象的

24、编程语言,是微软.NET开发环境的重要组成部分。而Microsoft Visual C# 2005是微软开发的C#编程集成开发环境(同种产品还有Borland公司的C# Builder),它是为生成在 .NET Framework 上运行的多种应用程序而设计的。C# 简单、功能强大、类型安全,而且是面向对象的。C# 凭借它的许多创新,在保持 C 样式语言的表示形式和优美的同时,实现了应用程序的快速开发。Visual Studio 包含 Visual C#,这是通过功能齐全的代码编辑器、项目模板、设计器、代码向导、功能强大且易于使用的调试器以及其他工具实现的。通过 .NET Framework

25、类库,可以访问多种操作系统服务和其他有用的精心设计的类,这些类可显著加快开发周期。1.4 VC+的的Windows程序设计方法程序设计方法 C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。 C#是一种安全的、稳定的、简单的、优雅的,由C和C+衍生出来的面向对象的编程语言。它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合

26、了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言1.4 VC+的的Windows程序设计方法程序设计方法3其他桌面编程方法及语言简要介绍其他桌面编程方法及语言简要介绍vJAVA:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级

27、计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。vJava由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。1.4 VC+的的Windows程序设计方法程序设计方法Java平台由Java虚拟机(Java Virtual Machine,简称JVM)和Java 应用编程接口(Application Programming Interface,简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部

28、分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.7。1.4 VC+的的Windows程序设计方法程序设计方法vJava分为三个体系J2SE(Java2 Platform Standard Edition,java平台标准版),J2EE(Java 2 Platform,Enterprise Edition,java平台企业版),J2ME(Java 2

29、Platform Micro Edition,java平台微型版)。un 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。1.4 VC+的的Windows程序设计方法程序设计方法3其他桌面编程方法及语言简要介绍其他桌面编程方法及语言简要介绍vWPF:WPF(Windows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于。NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与

30、开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。由 .NET Framework 3.0 开始引入,与 Windows Communication Foundation及 Windows Workflow Foundation并行为新一代 Windows 操作系统以及 WinFX 的三个重大应用程序开发类库。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。Windows XP、Windows Server 2003 和以后所有的 Windows 操作系统版本都可

31、以使用它。1.4 VC+的的Windows程序设计方法程序设计方法WPF其实不仅仅是图形引擎而已,它将给Windows应用程序的开发带来一次革命,因为新的架构提供了一种全新的开发模式。当然对于普通用户而言,最直观的就是界面越来越漂亮,看起来越来越舒服了;但对于开发人员而言,界面显示和代码将更好的得到分离,这与从前的桌面应用程序开发有很多不同(界面设置和代码是融合在一起的),这是比较具有革命性的改变之一。还有就是桌面应用程序和浏览器应用程序的融合,根据ms的承诺,正在开发中的WPF/E,即WPF Everywhere版本,将为基于WPF的应用程序提供全面的浏览器支持,这意味着未来开发出的应用程序

32、将可以基于浏览器在不同的操作系统上运行,当然由于目前还在开发中,并不确定会不会有一定的限制,根据WPF/E开发组的定义,WPF/E仍然是WPF的子集,而不是后继版本。总体而言,WPF的前景应该是一片光明。331. 句柄句柄句柄是整个句柄是整个Windows编程的基础。一个句柄编程的基础。一个句柄是指是指Windows使用的一个唯一的整数值,是使用的一个唯一的整数值,是一个一个4字长(字长(32位无符号整数)位无符号整数)的数值,用于的数值,用于标识应用程序中不同的对象和同类对象中不同标识应用程序中不同的对象和同类对象中不同的实例。的实例。如标识一个窗口、按钮、图标、滚动条、输入如标识一个窗口、

33、按钮、图标、滚动条、输入/输出设备、控件或文件等。输出设备、控件或文件等。应用程序通过句柄能够访问相应的对象信息。应用程序通过句柄能够访问相应的对象信息。2 Windows程序设计的常用数据结构程序设计的常用数据结构34v常用的句柄类型常用的句柄类型HWND HWND 标识窗口句柄标识窗口句柄HINSTANCEHINSTANCE标识当前实例句柄标识当前实例句柄HCURSORHCURSOR 标识光标句柄标识光标句柄HFONTHFONT标识字体句柄标识字体句柄HPENHPEN标识画笔句柄标识画笔句柄HBRUSHHBRUSH标识画刷句柄标识画刷句柄HDCHDC标识设备环境句柄标识设备环境句柄HBIT

34、MAPHBITMAP 标识位图句柄标识位图句柄HICONHICON标识图标句柄标识图标句柄HMENUHMENU标识菜单句柄标识菜单句柄HFILEHFILE标识文件句柄标识文件句柄 2 Windows程序设计的常用数据结构程序设计的常用数据结构35关键字关键字类型类型等价于等价于BOOLBOOL逻辑类型逻辑类型intintBOOLEAN BOOLEAN 逻辑逻辑BYTEBYTEBYTEBYTE字节字节unsinged charunsinged charCHARCHAR字符字符charcharDOUBLE DOUBLE 双精度双精度doubledoubleDWORD DWORD 双字双字unsig

35、ned longunsigned longFLOATFLOAT浮点数浮点数floatfloatHANDLEHANDLE句柄句柄2.2 常用常用数据类型数据类型36INTINT整数整数intintLONGLONG长整数长整数longlongSHORTSHORT短整数短整数shortshortUCHARUCHAR无符号字符无符号字符unsinged charunsinged charUINTUINT无符号整数无符号整数unsinged intunsinged intULONGULONG无符号长整数无符号长整数unsigned longunsigned longUSHORTUSHORT无符号短整数无

36、符号短整数unsigend shortunsigend shortVOIDVOIDvoidvoidWCHARWCHAR双字节码双字节码unsigned shortunsigned shortWCHAR_TWCHAR_T双字节码双字节码unsigned shortunsigned shortWORDWORD字字unsigned shortunsigned short37WPARAM消息参数消息参数UINTLPARAM消息参数消息参数LONGLRESULT消息返回值消息返回值 LONGHINSTANCE实例句柄实例句柄unsigned longHWAND窗口句柄窗口句柄unsigned longH

37、DC设备环境句柄设备环境句柄unsigned longTCHAR字符字符charLPSTR字符指针字符指针char *LPCSTR常量字符指针常量字符指针const char*LPTSTR字符指针字符指针TCHAR *LPVOID无类型指针无类型指针 void *LPCVOID无类型长指针无类型长指针const void *38(1 1)坐标结构)坐标结构typedef struct tagPOINT typedef struct tagPOINT LONG x; LONG x; LONG y; LONG y; POINT POINT; ; 注:在注:在MFCMFC中还有一个类中还有一个类CP

38、ointCPoint,与,与POINTPOINT结构近似,结构近似,但它有许多成员函数。但它有许多成员函数。(2 2)长、宽尺寸结构:)长、宽尺寸结构:CSIZECSIZE,CsizeCsize;typedef struct tagSIZE typedef struct tagSIZE int cx; int cx; int cy; SIZE; int cy; SIZE; 2.3 点和矩形区域点和矩形区域39(3 3)记录矩形区域结构)记录矩形区域结构RECTRECT和和CrectCrecttypedef struct tagRECT typedef struct tagRECT LONG l

39、eft; LONG left; LONG top; LONG top; LONG right; LONG right; LONG bottom; LONG bottom; RECT; RECT; 在在MFCMFC中中Crect Crect 与此类似,但有成员函数。与此类似,但有成员函数。 LPRECT LPRECT 为指针为指针RECTRECT类型的常数指针。类型的常数指针。(4 4)颜色)颜色COLORREFCOLORREF 32-bit value used to specify an RGB color. 32-bit value used to specify an RGB color

40、. 例:例:COLORREF RGB(BYTE bRed,BYTE bGreen,BYTE Bblue);COLORREF RGB(BYTE bRed,BYTE bGreen,BYTE Bblue); 402.4 窗口结构窗口结构typedef struct typedef struct UINT style;UINT style; / / 窗口类型窗口类型 WNDPROC lpfnWndProc;WNDPROC lpfnWndProc; / / 窗口函数指针窗口函数指针int cbClsExtraint cbClsExtra; / ; / 为类结构的预留额外空间为类结构的预留额外空间int

41、cbWndExtra;int cbWndExtra; / / 为窗口结构预留额外空间为窗口结构预留额外空间 HANDLE hInstance;HANDLE hInstance; / / 窗口类的应用实例句柄窗口类的应用实例句柄HICON hIcon;HICON hIcon; / / 图标句柄图标句柄HCURSOR hCursor;HCURSOR hCursor; / / 窗口类的光标窗口类的光标 HBRUSH hbrBackground; HBRUSH hbrBackground; / / 窗口类的背景刷窗口类的背景刷LPCTSTR lpszMenuName;LPCTSTR lpszMenuN

42、ame; / / 菜单资源名菜单资源名LPCTSTR lpszClassName;LPCTSTR lpszClassName; / / 窗口类名窗口类名 WNDCLASS; WNDCLASS; 412.4 窗口结构窗口结构vWNDCLASS中的中的style代表窗口类型,可取下面的值:代表窗口类型,可取下面的值:WS_CHILD子窗口(不能与子窗口(不能与WS_POPUP同时使用)同时使用)WS_BORDER带边框的窗口带边框的窗口 WS_CAPTION带标题栏的窗口带标题栏的窗口WS_HSCROLL带有水平滚动条的窗口带有水平滚动条的窗口WS_MAXIMIZE最大尺寸的窗口最大尺寸的窗口WS

43、_MAXIMIZEBOX带最大化框的窗口带最大化框的窗口WS_MINIMIZE最小尺寸的窗口最小尺寸的窗口WS_MINIMIZEBOX带最小化框的窗口带最小化框的窗口 WS_OVERLAPPED带边框和标题栏的窗口带边框和标题栏的窗口WS_OVERLAPPEDWINDOW带边框、标题栏、系统菜单及最大、最小化框的窗口带边框、标题栏、系统菜单及最大、最小化框的窗口 WS_POPUP弹出式窗口弹出式窗口WS_POPUPWINDOW带边框和系统菜单的弹出式窗口带边框和系统菜单的弹出式窗口WS_SYSMENU 带系统菜单的窗口带系统菜单的窗口WS_VSCROLL带垂直滚动条的窗口带垂直滚动条的窗口42

44、1 1、消息结构:、消息结构:MSGMSGtypedef struct tagMSG typedef struct tagMSG HWNDHWND hwnd; hwnd; / / /消息发向的窗口句柄消息发向的窗口句柄UINTUINT message; message; / /消息标识符消息标识符WPARAM wParamWPARAM wParam; /16; /16位的消息参数,值因消息异位的消息参数,值因消息异LPARAM lParam; LPARAM lParam; /32/32位的消息参数,值因消息异位的消息参数,值因消息异DWORDDWORD time; time; / /消息放入消

45、息队列的时间消息放入消息队列的时间POINTPOINT pt; pt; / /消息放入消息队列的鼠标位置消息放入消息队列的鼠标位置 MSG; MSG; 说明:说明:WPARAMWPARAM含义和数值因消息不同而不同含义和数值因消息不同而不同比如:键盘消息和鼠标消息所对应的比如:键盘消息和鼠标消息所对应的WPARAMWPARAM消息所代表的消息是不同的。消息所代表的消息是不同的。2.5 消息消息432.5 消息消息2、MSG中的域说明中的域说明hwnd是一个窗口句柄,用于标识消息发向的窗是一个窗口句柄,用于标识消息发向的窗口。口。time用于保存消息放进消息队列的时间。用于保存消息放进消息队列的

46、时间。pt用于保存将消息放入消息队列时的鼠标位置。用于保存将消息放入消息队列时的鼠标位置。message是消息标识符,它是一个是消息标识符,它是一个32位的无符位的无符号整数。号整数。Windows中的每条消息都有一个对应中的每条消息都有一个对应的消息标识符,这些标识符是在的消息标识符,这些标识符是在windows.h中定中定义的。义的。 443、消息的种类、消息的种类 标准标准Windows消息消息v除除WM_COMMAND外,所有以外,所有以WM_ 为前缀的消息,为前缀的消息,由窗口和视图处理。由窗口和视图处理。控制消息控制消息v由控件和子窗口发给父窗口的消息。由控件和子窗口发给父窗口的消

47、息。命令消息命令消息v来自用户接口对象。如:菜单、工具条和加速键等。来自用户接口对象。如:菜单、工具条和加速键等。2.5 消息消息452.5 消息消息4、常见消息前缀的含义、常见消息前缀的含义BM 表示按钮控制消息表示按钮控制消息CB 组合框控制消息组合框控制消息EM 编辑框控制消息编辑框控制消息LB 列表控制消息列表控制消息SBM 滚动条控制消息滚动条控制消息WM 窗口消息窗口消息462.5 消息消息5、Windows常用鼠标消息常用鼠标消息WM_LBUTTONDBLCLK WM_LBUTTONDOWN WM_LBUTTONUP WM_MBUTTONDBLCLK WM_MBUTTONDOWN

48、 WM_MBUTTONUP WM_RBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP 472.5 消息消息6、Windows常用键盘消息常用键盘消息WM_KEYUP WM_KEYDOWNv 按下非系统键时产生此消息按下非系统键时产生此消息,系统键是指实现系系统键是指实现系统操作的组合键统操作的组合键,如如Alt和和F1相结合的按钮键。附相结合的按钮键。附加参数加参数wParam为按下键的虚拟键码,为按下键的虚拟键码,lParam记录按钮的重复次数、先前状态等。记录按钮的重复次数、先前状态等。vWM_KEYUP是释放按键时的键盘消息,其含义是释放按键时的键盘消息,

49、其含义同同WM_KEYDOWN。 WM_CHARv按下非系统键时产生的消息,附加参数按下非系统键时产生的消息,附加参数wParam为按键的为按键的ASCII码,码,lparam同前。同前。487、其它常用、其它常用Windows常用消息常用消息vWM_CREATECreateWindow函数发生的消息。函数发生的消息。vWM_CLOSE关闭窗口时产生的消息,如有子窗口,也一起删除。关闭窗口时产生的消息,如有子窗口,也一起删除。vWM_DESTROY关闭窗口时产生的消息关闭窗口时产生的消息vWM_PAINT hdc = (HDC) wParam; /发生用户区域移动或显示事件、用户窗口改变大小发

50、生用户区域移动或显示事件、用户窗口改变大小的事件、程序通过流动条滚动窗口,覆盖在窗口上的事件、程序通过流动条滚动窗口,覆盖在窗口上面的其它对象(如菜单)移开时,都会产生此消息!面的其它对象(如菜单)移开时,都会产生此消息!.2.5 消息消息498、消息的产生、消息的产生用户产生消息用户产生消息 Windows 本身产生消息本身产生消息 应用程序本身产生消息应用程序本身产生消息 其他应用程序产生消息其他应用程序产生消息9、消息的传递、消息的传递Windows系统有一个存放消息的队列,每个应用程系统有一个存放消息的队列,每个应用程序也有一个消息队列。序也有一个消息队列。Windows系统先将收到的

51、消系统先将收到的消息存放在系统队列中;然后再分发到相应的应用程息存放在系统队列中;然后再分发到相应的应用程序队列中。应用程序则从自身的队列中获取消息并序队列中。应用程序则从自身的队列中获取消息并进行处理。进行处理。10.2.5 消息消息5010、消息的处理、消息的处理通常每个通常每个Windows 应用程序至少对应一个窗应用程序至少对应一个窗口,每个窗口都要有一个口,每个窗口都要有一个窗口函数窗口函数负责处理负责处理该窗口内所发生的事件。每个窗口至少有一该窗口内所发生的事件。每个窗口至少有一个窗口函数,负责处理该窗口的所有消息。个窗口函数,负责处理该窗口的所有消息。2.5 消息消息511、Wi

52、ndows标识符常用标识符常用 命名规则命名规则函数命名规则函数命名规则v函数名函数名 = 动词动词 + 名词名词v动词和名词的第一个字母必须大写动词和名词的第一个字母必须大写v例例 GetMessage变量命名规则变量命名规则v小写字母前缀表示变量的类型小写字母前缀表示变量的类型,其余其余 的部分描述变的部分描述变量的功能量的功能v例例 nCount匈牙利命名法匈牙利命名法v变量名以小写字母或代表数据类型的小写字母开头变量名以小写字母或代表数据类型的小写字母开头.vEg: szCmdLine 补充补充: Windows程序的名字程序的名字52前缀前缀代表的数据类型代表的数据类型cchar o

53、r WCHAR or TCHARbyBYTE (unsigned char)nshortiintx, yint used as x-coordinate or y-coordinatecx, cyint used as x or y length; c stands for countb or fBOOL (int); f stands for flagwWORD (unsigned short)lLONG (long)dwDWORD (unsigned long)fnfunctionsstringszstring terminated by 0 characterhhandleppointe

54、r2、Windows程序常见名字前缀的含义程序常见名字前缀的含义533 Windows程序的基本结构1、简单的、简单的Windows程序至少包含两个函数程序至少包含两个函数:WinMain ( ) : 必有且仅有一个。是程序执行的入口必有且仅有一个。是程序执行的入口点,类似于点,类似于C程序中的程序中的main函数函数窗口函数窗口函数 : 每个窗口对应一个窗口函数,以响应该每个窗口对应一个窗口函数,以响应该程序窗口中发生的事件消息。程序窗口中发生的事件消息。2、WinMain ( )函数需完成的功能函数需完成的功能定义窗口类定义窗口类注册窗口类注册窗口类建立窗口类的窗口建立窗口类的窗口显示窗口

55、显示窗口运行消息循环运行消息循环543 Windows程序的基本结构3、Windows程序的执行逻辑程序的执行逻辑Windows系统首先为该程序建立必备的程序环境,系统首先为该程序建立必备的程序环境,如定义并初始化一些全局变量,接下来就寻找并进如定义并初始化一些全局变量,接下来就寻找并进入入WinMain函数。函数。WinMain是是Window程序的入口点,由它控制程序程序的入口点,由它控制程序的执行流程。的执行流程。WinMain函数依次完成以下工作:调函数依次完成以下工作:调用用API函数定义并注册窗口类,创建程序窗口,显函数定义并注册窗口类,创建程序窗口,显示窗口,建立消息循环,等待用

56、户操作程序窗口。示窗口,建立消息循环,等待用户操作程序窗口。用户在程序窗口中所作的每件事情都会产生一个消用户在程序窗口中所作的每件事情都会产生一个消息,该消息会被息,该消息会被Windows传递到该程序的消息队传递到该程序的消息队列中。列中。WinMain中的消息循环会不断地从本程序的中的消息循环会不断地从本程序的消息队列中获取消息,并将其传递给该窗口的窗口消息队列中获取消息,并将其传递给该窗口的窗口处理函数,由窗口处理函数对消息进行处理,实现处理函数,由窗口处理函数对消息进行处理,实现相应的程序功能。相应的程序功能。553.2 Win32 Application程序设计v在在Miscroso

57、ft Visual C+中的中的API程序设计方法程序设计方法一般的编程方法是先用一般的编程方法是先用VC+的的Win32 Application向向导建立一个导建立一个Windows应用程序的框架,然后将它修应用程序的框架,然后将它修改成自己的程序,并根据需要添加一些头文件、源改成自己的程序,并根据需要添加一些头文件、源程序文件及资源文件。程序文件及资源文件。【例例10-1】 在在VC+ 6.0环境下设计一个简单的环境下设计一个简单的Windows API程序,该程序在窗口中显示字程序,该程序在窗口中显示字符串符串Hellow, API Programming!。563.2 Win32 Ap

58、plication程序设计v编程过程如下:编程过程如下:(1)启动)启动VC+ 6.0,选择菜单,选择菜单“文件文件 | 新建新建”,在弹出的,在弹出的“新建新建”对话框中选择对话框中选择“工程工程”标签页,如图所示。标签页,如图所示。573.2 Win32 Application程序设计(2)选中)选中“工程工程”对话框中的对话框中的“Win32 Application”列列表项,并在表项,并在“位置位置”编辑框中指定本项目建立的磁盘编辑框中指定本项目建立的磁盘目录,然后在目录,然后在“工程工程”编辑框中输入项目文件的名字。编辑框中输入项目文件的名字。(3)单击)单击“确定确定”按钮,并在弹

59、出的对话框中选中按钮,并在弹出的对话框中选中“An empty project.”单选项,然后单击单选项,然后单击“完成完成”按按钮。最后将得到如图钮。最后将得到如图10-7(a)所示的空项目文件窗口。)所示的空项目文件窗口。(4)选择菜单)选择菜单“文件文件 | 新建新建”,然后在弹出的对话框中,然后在弹出的对话框中选择选择“文件文件”标签,并选择列表中的标签,并选择列表中的“C+ Source File”项目,然后在项目,然后在“文件文件”编辑框中输入源程序文件编辑框中输入源程序文件名名“HellApi”,如图,如图10-7(b)所示。输入完成后,单)所示。输入完成后,单击击“结束结束”按

60、钮。按钮。 58.3.2 Win32 Application程序设计59.3.2 Win32 Application程序设计(5)打开目录)打开目录C:dkHellApi,在该目录中可以看到,在该目录中可以看到以下文件名:以下文件名:HellApi.cpp、HellApi.dsp、HellApi.dsw、HellApi.ncb、HellApi.opt,这些,这些文件就是在前面的操作过程产生的。文件就是在前面的操作过程产生的。(6)在)在HellApi.cpp中输入下面的程序代码。中输入下面的程序代码。60HellApi.cpp#include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM)

温馨提示

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

评论

0/150

提交评论