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