最新Windows-编程基础——概述.doc
《最新Windows-编程基础——概述.doc》由会员分享,可在线阅读,更多相关《最新Windows-编程基础——概述.doc(140页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateWindows-编程基础概述Windows-编程基础概述1.1、Windows的介绍Windows是一种基于图形界面的多任务操作系统。为这个环境开发的程序有着相同的外观和命令结构。对用户 来说,这使得学习使用Windows应用程序变得容易了。为了帮助开发Windows应用程序,Windows提供了大量的内建 函数以方便地使用弹出菜单、滚动条、对话框、图标和其他一些友好
2、的用户界面应该具有的特性。Windows运行应用程序以硬件无关的方式来处理视频显示、键盘、鼠标、打印机、串行口以及系统时钟。最值 得注意的Windows特性就是其标准化的图形用户界面。统一的界面使用图片或图标来代表磁盘驱动器、文件、子目 录以及其它操作系统的命令和动作。统一的用户界面也为程序员带来了好处。例如,你可以很方便地使用常见菜单和对话框的内建函数。所有的菜单都具有相同风格的键盘和鼠标接口,因为是Windows而不是程序员在实现它。Windows的多任务环境允许用户在同一时刻运行多个应用程序或同一个应用程序的多个实例。一个应用程序可 能处于激活状态。激活的应用程序是指它正接收用户的输入。
3、因为每一个瞬间仅有一个程序能够被处理,因此同一时间也只能有一个应用程序处于激活状态。但是,可以有任意个数的并行运行的任务。1.2、Windows的简要历史Windows最初由Microsoft公司在1983年11月宣布,1985年11月推出了第一公开发行版本,即1.01版。此后两年,1.01版进行了几次修改以满足国际市场的需求,并增减了一些显示器和打印机的驱动程序。1987年11月发行的Windows 2.0版在用户界面上做了些改进。例如:重叠式窗口的引入,还增强了键盘和鼠标接口,特别是增强了选单和对话框的功能(略) 1.3、用户界面的构件1.3.1 窗口窗口是屏幕上与一个应用程序相关的矩形区
4、域,它是用户与产生该窗口的应用程序之间的可视界面。对应用程序来说,窗口是应用程序控制下的屏幕上的一个矩形区域,应用程序创建并控制窗口的所有方面。当用户启动一个应用程序时,一个窗口就被创建。每当用户操作窗口中的对象时,程序就有所响应。1.3.2 边框绝大多数窗口都有一个环绕着它的边框,边框不仅作为窗口的边界,它也用来指明窗口的状态,即窗口是否是一个活动窗口。当我们将鼠标指针放在边框上按下鼠标键并移动鼠标时,就可以改变窗口的大小。1.3.3 标题栏标题栏位于窗口的顶部,其中显示的文本信息用于标注程序,一般是应用程序的名字,这便于用户知道哪个应用程序正在运行。标题栏的颜色反映一个窗口是否是一个活动窗
5、口。1.3.4 控制框控制框是每个窗口左上方的小图片,每个应用程序都使用它。在控制图标上单击鼠标键会使Windows显示系统菜单。系统菜单它提供了诸如还原、移动、大小、最小化、最大化以及关闭这样的标准操作。1.3.5 最小化图标每个Windows 98及Windows NT应用程序都在窗口的右上角显示三个图标。最左边的图标是一段短下划线,这就是最小化图标。它可以使用程序被最小化。1.3.6 最大化图标最大化图标是三个图标中中间的那一个,看起来象两个小窗口。使用最大化图标可以使用应用程序占满整个屏幕。如果选择了这个图标,其它应用程序窗口都会被盖住。1.3.7 垂直滚动条如果有必要,应用程序可以显
6、示一个垂直滚动条。垂直流动条显示在应用程序窗口的右边,在两端有两个方向相反的箭头。它还有一个着色的棒和一个透明的窗口块。后者被用于显示当前显示内容与整个文档的关系。你可以用滚动条来选择显示哪一页。一般在任何一个箭头上单击一下会使显示内容移动一行。单击向上箭头下方的窗口块并拖动它会使屏幕输出快速更新到应用程序屏幕输出的任意位置。1.3.8 水平滚动条也可以显示一个水平滚动条 。水平滚动条显示在窗口的底部,具有与垂直滚动条类似的功能。你用它来选择 要显示哪些列。一般在任何一个箭头上单击一个会使显示内容移动一列。单击向左箭头右边的窗口块并拖动它会使屏幕输出快速更新到应用程序屏幕输出的任意位置。1.3
7、.9 选单栏一个可选择的菜单条可以显示在标题条的下方。通过菜单条来选择菜单和子菜单。这种选择可以通过用鼠标单击,也可以用热键组合来实现。热键组合经常是ALT与命令中带下划线的字母的组合,比如File命令中的 “F”。1.3.10 用户区通常用户区占据了窗口最大的部分。这是应用程序的基本输出区域。应当由应用程序来复杂管理用户区。另外,应用程序可以输出到用户区。1.4、面向对象的思维方法对于程序员来说,面向对象意味着非常熟悉的事物:将世界看成是一组彼此相关并相互通信的实体即对象组成,每个对象有一个名字来标识,这是人们通常看待世界的方式。例如,当看见一辆汽车时,所见到的是一辆汽车,而不是一大堆原子。
8、人们可以将汽车分解为车轮、发动机、车门、油箱等,它们都是具体的实体即对象。对象之间的通信被称为发送消息,即一个对象请求另一个对象执行某种方式的操作。例如,交叉路口的红灯“请求”驾驶员停车,驾驶员在接受到消息之后,他所执行的动作是踏下制动踏板,这有向汽车发送了一条消息,汽车在接受到此消息之后,又将该消息分解之后发送到相关的对象上:制动器作用于车轮上,将动能转变成为势能,使车速降下来;尾灯又向它后面的其它车辆的驾驶员发送消息;各种仪表盘向驾驶员反馈出所发送的消息的动作结果。从程序员角度而言,对象是内存中一块有名的存储单元。我们通常所谓的变量就是一种数据对象,但对象的概念比变量的含义更广义,通常将对
9、象定义成为包含有数据和代码的内存区域,数据表征对象的特征,而代码用于响应消息,使对象进行某些动作。从屏幕上显示的一个可视的窗口对象为例,我们可以对比分析一下用户心目中的对象和程序员心目中的对象的关系。窗口对象的特征,例如颜色、长度、其中显示的信息等,在程序中被表示为数据,用户对窗口对所做的操作,例如移动窗口、改变窗口的大小等,使得用户向窗口发送了消息,这些消息引起了计算机(内存中的)对象执行相应的代码,代码执行的结果改变了对象中的数据,使对应的可以视对象 的位置和大小发生了变化。对象为响应消息所执行的代码被称为方法,对象中保存的数据构成对象的属性,对象的抽象定义就是执行某些动作,否则,没有其它
10、途径可以使一个对象动作起来。向一个对象发送消息在程序中表示为:functionName(id, arg1, arg2, .);其中,消息是functionName,id是标识对象的一个对象名,或称其为对象的标识符,Windows使用某种类型的 数据来作为对象的标识符,这个标识符号常被称为对象的句柄。arg1等为消息所带的参数。虽然发消息类似于标准的函数调用,但消息也有函数调用中没有的特性,例如,消息始终在执行一选择机制,其参数与其它消息区别开来,从而告诉该对象完成什么样的操作。一个函数名始终指向内存中该函数的代码所位于的确定地址,消息并不指向内存中的某地址,但却告诉接受消息的对象要引用的内存地
11、址是什么。函数不仅说明操作,而且还要执行如何完成该操作的方法。消息只说明该操作,在对象中定义的方法说明如何完成该操作。当向不同的对象发送相同的消息时,所执行的方法是不同的。在面向对象的程序设计中,每个对象由一个类来定义,类是对一组性质相同的对象的程序描述,它是由概括了一组对象共同性质的方法和数据组成。从一组对象中抽象出公共的方法与数据,将它们保存在一个类中是面向对象程序设计的核心。在日常生活中,我们也以类这种方式来定义客观对象。通过对客观对象进行抽象,我们将性质相同的对象归为一类,形成概念,例如,人类、苹果类、食品类等。通过对客观对象分类,我们也可以更好地认识客观对象,例如,当知道张三是一个人
12、时,不用对张三进行更多的描述,我们已知道张三作为一个人所具有的特征和行为,因为它们已经在“人”类中进行了描述。在面向对象的程序中,类被用作样板来生产具有相同行为方式的对象。类就像是生产对象的一个工厂,在生产对象时,对象具有类中所描述的同样的数据结构和方法,同时,对象的每个数据在创立之初取得一个初始值,形成对象的初始状态。对象通过发送消息相互作用,对象的状态从一种状态过渡到另一种状态,当所有的有关对象到达某种特定的状态时就得程序的运行结果。使用类产生对象的过程也称为生成该类的一个实例。因此,对象也可以定义为对象是类的一个实例。定义类也意味着将该类的对象公用代码放在内存的公共区域中,而不必对每个对
13、象都将它们的代码和数据重新进行一次描述,这减轻了程序员的劳动强度。我们可以将一些常用对象定义放在一个公用库中,而在程序中需要该类的一个对象时,就创建该类的一个实例。Windows已为程序员预定义了许多像按钮、滚动杠和对话框等对象的类,当程序员需要这些类的对象时,仅需创立该类的实例即可。对于同一个类的不同对象,在建立对象时其初始状态不同,因而这些对象在屏幕上显示的位置、大小等属性也不相同,但同类的对象的操作是相同的(因为它们共用相同的方法)。这也就是为什么不同的Windows应用程序对用户表现出一致的操作特性的原因之一。1.5、句柄Windows应用程序中存在许多对象,例如选单、窗口、图标、内存
14、对象、位图、刷子、设备对象和程序实例等,在Windows中,对象使用句柄进行标识,这样,通过使用一个句柄,应用程序可以访问一个对象。在Windows软件开发工具中,句柄被定义为一种新的数据类型。在应用程序中,对句柄的使用一般只有赋值(句柄可以被赋以初始值、被改变为用于标识同类对象中的另一个对象和被用作函数的参数)、与NULL进行相等比较(判定一个句柄是否为一个有效的句柄)和与标识同类对象的另一个句柄进行相等比较(判定两个句柄是否标识同一个对象),没有其它的运算。虽然在有的书中介绍说句柄是一个十六位的整数,但实际情况并不这样简单,它的长度将会随着不同的计算机平台和Windows的发展而有所变化,
15、例如,在32位Windows中,句柄将是一个32位的数据,并且不是整数类型。一种通用句柄类型为HANDLE,在Windows 3.1以前的版本中,它可被用于标识所有种类的对象,在Windows 3.1中,部分地保留了这一特点,在本教程的程序中也有所反映。在Windows 3.1中,从HANDLE类型又派生出了一些新的句柄数据类型,每种类型的句柄用于标识一种类型的对象,下面是一些常见的句柄类型:类型说明HANDLE通用句柄类型HWND标识一个窗口对象HDC标识一个设备对象HMENU标识一个选单对象HICON标识一个图标对象HCURSOR标识一个光标对象HBRUSH标识一个刷子对象HPEN标识一个
16、笔对象HFONT标识一个字体对象HINSTANCE标识一个应用程序模块的一个实例HLOCAL标识一个局部内存对象HGLOBAL标识一个全局内存对象1.6、数据类型及常量为便于开发Windows应用程序,Windows的开发者新定义了一些数据类型。这些数据类型或是与C/C+中已有的数据类型同义,或是一些新的结构数据类型。引入这些类型的主要目的是为便于程序员开发Windows应用程序,同时也是为了增强程序的可读性;另一个目的是为了便于程序将来能被移植到其它种类的计算机平台上或适应Windows将来的新版本的变化。例如,本教程目前使用16位API(Application Program Interf
17、ace),现在Windows的版本使用32位API,只要将HANDLE等句柄类型定义为32位长,然后重新编译程序,就可以很方便地将一个使用16位API的Windows应用程序改为使用32位API的程序,使其能运行在32位API Windows上。大部分的数据类型在Windows.h中定义,下面是在这个文件中定义的部分类型:#definePASCALpascal#defineNEARnear#defineFAR fartypedefunsigned char BYTEtypedefunsigned shortWORDtypedefunsigned long DWORDtypedeflongLON
18、Gtypedefchar *PSTRtypedef char NEAR *NPSTRtypedefchar FAR*LPSTRtypedefvoidVOIDtypedefint *LPINTtypedefLONG(PASCAL FAR * FARPROC)();在Windows.h中,使用typedef还定义了一些新的结构类型。这些结构类型的名字也使用大写形式的标识符:类型说明MSG消息结构WNDCLASS窗口的类的结构PAINTSTRUCT绘图结构POINT点的坐标的结构RECT矩形结构我们在这里以类型MSG为例来说明类型的定义方法,对于其它类型,在以后用到时再作详细地说明。类型MSG是一个
19、消息结构,它的定义方式及其各域的含义如下:typedef struct tagMSG HWNDhWnd;/ 窗口对象的标识符,该条消息传递到它所标识的窗口上 UINT message;/ 消息标识符,标识某个特定的消息 WPARAMwParam;/ 随同消息传递的16位参数 LPARAMlParam;/ 随同消息传递的32位参数 DWORD time;/ 消息产生的时间 POINT pt;/ 产生消息时光标在屏幕上的坐标 MSG;typedefMSGFAR*LPMSG;其中的POINT类型的定义是:typedefstructtagPOINT int x; /* X坐标 */int y;/* Y
20、坐标 */ POINT; typedefPOINTFAR*LPPOINT;Windows.h在定义大部分类型的同时,还定义了该类型的指针类型。例如,上例中的LPPOINT和LPMSG等,其中字母前缀LP表示远指针类型;若使用NP作为一个类型的前缀,则表示近指针类型;若使用P作为一个类型的前缀时,则表示一般的指针类型,这时由编译程序时所使用的内存模块决定这种指针是远指针或是近指针。在Windows.h中说明的大部分指针类型都采用这里介绍的方法进行说明,例如,LPRECT,它表示一个RECT类型的远指针。在Windows.h中说明的大部分指针类型使用了C/C+的关键字const,如果一个指针类型的
21、名字前缀为LPC、NPC或PC,则其中的字母C表示这种类型的指针变量所指向的变量不能通过该指针变量来修改,这种指针类型一般采用下述方法进行说明:typedefconstPOINTFAR* LPCPOINT;typedefconstRECFAR* LPCRECT;一个使用const修饰的指针(称其为const指针)可以指向没有使用const修饰的变量,但没有使用const修饰的指针不能指向const修饰的变量,例如:constPOINTpt;LPCPOINTlpPoint = &pt;/ 正确LPPOINT lpPoint = &pt;/ 错误当向函数传递参数时,必须特别注意这个问题,例如:vo
22、idfun(LPPOINT lppt) ;.LPCPOINT lpPoint ;fun(lpPoint) ;编译器将指示这个函数调用语句是错误的。所以,在一个函数不修改一个指针参数所指向的变量的情况下,最好将该参数说明为const指针,使const类型的指针也能用于该函数的参数。Windows.h中说明的大部分函数使用了const指针参数。在Windows.h中,大多数语句是用于定义一个常量,例如:#denfineWM_QUIT0X0012该语句用标识符WM_QUIT来表示编号为0X0012的消息。每个常量由一个前缀和表示其含义的单词组成的标识符组成,两者之间用下画线隔开。前缀表明这些常量所属
23、的一般范畴。下面是一些前缀和它们所属的范畴的说明。类型说明CS窗口类的风格(Class Style)IDI预定义的图标对象的标识符(IDentity of Icon)IDC预定义的光标对象的标识符(IDentity of Cursor)WS窗口的风格(Windows Style)CW创建窗口(Create Windows)WM窗口消息(Windows Message)DT绘制文本(Drawing Text)在变量名的表示方法方面,Windows推荐使用一种称为“匈牙利表示法”的方法。每个变量名用小写字母或描述了变量的数据类型的字母作为前缀,变量的名字紧跟其后,且用大写字母开始的单词(一个或多个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 Windows 编程 基础 概述
限制150内