Windows编程基础概述说课材料.docx

上传人:b****6 文档编号:6969414 上传时间:2023-01-13 格式:DOCX 页数:31 大小:46.68KB
下载 相关 举报
Windows编程基础概述说课材料.docx_第1页
第1页 / 共31页
Windows编程基础概述说课材料.docx_第2页
第2页 / 共31页
Windows编程基础概述说课材料.docx_第3页
第3页 / 共31页
Windows编程基础概述说课材料.docx_第4页
第4页 / 共31页
Windows编程基础概述说课材料.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

Windows编程基础概述说课材料.docx

《Windows编程基础概述说课材料.docx》由会员分享,可在线阅读,更多相关《Windows编程基础概述说课材料.docx(31页珍藏版)》请在冰豆网上搜索。

Windows编程基础概述说课材料.docx

Windows编程基础概述说课材料

1.1、Windows的介绍

  Windows是一种基于图形界面的多任务操作系统。

为这个环境开发的程序有着相同的外观和命令结构。

对用户来说,这使得学习使用Windows应用程序变得容易了。

为了帮助开发Windows应用程序,Windows提供了大量的内建函数以方便地使用弹出菜单、滚动条、对话框、图标和其他一些友好的用户界面应该具有的特性。

  Windows运行应用程序以硬件无关的方式来处理视频显示、键盘、鼠标、打印机、串行口以及系统时钟。

最值得注意的Windows特性就是其标准化的图形用户界面。

统一的界面使用图片或图标来代表磁盘驱动器、文件、子目录以及其它操作系统的命令和动作。

统一的用户界面也为程序员带来了好处。

例如,你可以很方便地使用常见菜单和对话框的内建函数。

所有的菜单都具有相同风格的键盘和鼠标接口,因为是Windows而不是程序员在实现它。

  Windows的多任务环境允许用户在同一时刻运行多个应用程序或同一个应用程序的多个实例。

一个应用程序可能处于激活状态。

激活的应用程序是指它正接收用户的输入。

因为每一个瞬间仅有一个程序能够被处理,因此同一时间也只能有一个应用程序处于激活状态。

但是,可以有任意个数的并行运行的任务。

1.2、Windows的简要历史

  Windows最初由Microsoft公司在1983年11月宣布,1985年11月推出了第一公开发行版本,即1.01版。

此后两年,1.01版进行了几次修改以满足国际市场的需求,并增减了一些显示器和打印机的驱动程序。

1987年11月发行的Windows2.0版在用户界面上做了些改进。

例如:

重叠式窗口的引入,还增强了键盘和鼠标接口,特别是增强了选单和对话框的功能...(略)

1.3、用户界面的构件

  1.3.1窗口

  窗口是屏幕上与一个应用程序相关的矩形区域,它是用户与产生该窗口的应用程序之间的可视界面。

对应用程序来说,窗口是应用程序控制下的屏幕上的一个矩形区域,应用程序创建并控制窗口的所有方面。

当用户启动一个应用程序时,一个窗口就被创建。

每当用户操作窗口中的对象时,程序就有所响应。

  1.3.2边框

  绝大多数窗口都有一个环绕着它的边框,边框不仅作为窗口的边界,它也用来指明窗口的状态,即窗口是否是一个活动窗口。

当我们将鼠标指针放在边框上按下鼠标键并移动鼠标时,就可以改变窗口的大小。

  1.3.3标题栏

  标题栏位于窗口的顶部,其中显示的文本信息用于标注程序,一般是应用程序的名字,这便于用户知道哪个应用程序正在运行。

标题栏的颜色反映一个窗口是否是一个活动窗口。

  1.3.4控制框

  控制框是每个窗口左上方的小图片,每个应用程序都使用它。

在控制图标上单击鼠标键会使Windows显示系统菜单。

系统菜单它提供了诸如还原、移动、大小、最小化、最大化以及关闭这样的标准操作。

  1.3.5最小化图标

  每个Windows98及WindowsNT应用程序都在窗口的右上角显示三个图标。

最左边的图标是一段短下划线,这就是最小化图标。

它可以使用程序被最小化。

  1.3.6最大化图标

  最大化图标是三个图标中中间的那一个,看起来象两个小窗口。

使用最大化图标可以使用应用程序占满整个屏幕。

如果选择了这个图标,其它应用程序窗口都会被盖住。

  1.3.7垂直滚动条

  如果有必要,应用程序可以显示一个垂直滚动条。

垂直流动条显示在应用程序窗口的右边,在两端有两个方向相反的箭头。

它还有一个着色的棒和一个透明的窗口块。

后者被用于显示当前显示内容与整个文档的关系。

你可以用滚动条来选择显示哪一页。

一般在任何一个箭头上单击一下会使显示内容移动一行。

单击向上箭头下方的窗口块并拖动它会使屏幕输出快速更新到应用程序屏幕输出的任意位置。

  1.3.8水平滚动条

  也可以显示一个水平滚动条。

水平滚动条显示在窗口的底部,具有与垂直滚动条类似的功能。

你用它来选择要显示哪些列。

一般在任何一个箭头上单击一个会使显示内容移动一列。

单击向左箭头右边的窗口块并拖动它会使屏幕输出快速更新到应用程序屏幕输出的任意位置。

  1.3.9选单栏

  一个可选择的菜单条可以显示在标题条的下方。

通过菜单条来选择菜单和子菜单。

这种选择可以通过用鼠标单击,也可以用热键组合来实现。

热键组合经常是ALT与命令中带下划线的字母的组合,比如File命令中的“F”。

  1.3.10用户区

  通常用户区占据了窗口最大的部分。

这是应用程序的基本输出区域。

应当由应用程序来复杂管理用户区。

另外,应用程序可以输出到用户区。

1.4、面向对象的思维方法

  对于程序员来说,面向对象意味着非常熟悉的事物:

将世界看成是一组彼此相关并相互通信的实体即对象组成,每个对象有一个名字来标识,这是人们通常看待世界的方式。

例如,当看见一辆汽车时,所见到的是一辆汽车,而不是一大堆原子。

人们可以将汽车分解为车轮、发动机、车门、油箱等,它们都是具体的实体即对象。

  对象之间的通信被称为发送消息,即一个对象请求另一个对象执行某种方式的操作。

例如,交叉路口的红灯“请求”驾驶员停车,驾驶员在接受到消息之后,他所执行的动作是踏下制动踏板,这有向汽车发送了一条消息,汽车在接受到此消息之后,又将该消息分解之后发送到相关的对象上:

制动器作用于车轮上,将动能转变成为势能,使车速降下来;尾灯又向它后面的其它车辆的驾驶员发送消息;各种仪表盘向驾驶员反馈出所发送的消息的动作结果。

  从程序员角度而言,对象是内存中一块有名的存储单元。

我们通常所谓的变量就是一种数据对象,但对象的概念比变量的含义更广义,通常将对象定义成为包含有数据和代码的内存区域,数据表征对象的特征,而代码用于响应消息,使对象进行某些动作。

从屏幕上显示的一个可视的窗口对象为例,我们可以对比分析一下用户心目中的对象和程序员心目中的对象的关系。

窗口对象的特征,例如颜色、长度、其中显示的信息等,在程序中被表示为数据,用户对窗口对所做的操作,例如移动窗口、改变窗口的大小等,使得用户向窗口发送了消息,这些消息引起了计算机(内存中的)对象执行相应的代码,代码执行的结果改变了对象中的数据,使对应的可以视对象的位置和大小发生了变化。

  对象为响应消息所执行的代码被称为方法,对象中保存的数据构成对象的属性,对象的抽象定义就是执行某些动作,否则,没有其它途径可以使一个对象动作起来。

向一个对象发送消息在程序中表示为:

  functionName(id,arg1,arg2,...);

  其中,消息是functionName,id是标识对象的一个对象名,或称其为对象的标识符,Windows使用某种类型的数据来作为对象的标识符,这个标识符号常被称为对象的句柄。

arg1等为消息所带的参数。

  虽然发消息类似于标准的函数调用,但消息也有函数调用中没有的特性,例如,消息始终在执行一选择机制,其参数与其它消息区别开来,从而告诉该对象完成什么样的操作。

一个函数名始终指向内存中该函数的代码所位于的确定地址,消息并不指向内存中的某地址,但却告诉接受消息的对象要引用的内存地址是什么。

函数不仅说明操作,而且还要执行如何完成该操作的方法。

消息只说明该操作,在对象中定义的方法说明如何完成该操作。

当向不同的对象发送相同的消息时,所执行的方法是不同的。

  在面向对象的程序设计中,每个对象由一个类来定义,类是对一组性质相同的对象的程序描述,它是由概括了一组对象共同性质的方法和数据组成。

从一组对象中抽象出公共的方法与数据,将它们保存在一个类中是面向对象程序设计的核心。

  在日常生活中,我们也以类这种方式来定义客观对象。

通过对客观对象进行抽象,我们将性质相同的对象归为一类,形成概念,例如,人类、苹果类、食品类等。

通过对客观对象分类,我们也可以更好地认识客观对象,例如,当知道张三是一个人时,不用对张三进行更多的描述,我们已知道张三作为一个人所具有的特征和行为,因为它们已经在“人”类中进行了描述。

  在面向对象的程序中,类被用作样板来生产具有相同行为方式的对象。

类就像是生产对象的一个工厂,在生产对象时,对象具有类中所描述的同样的数据结构和方法,同时,对象的每个数据在创立之初取得一个初始值,形成对象的初始状态。

对象通过发送消息相互作用,对象的状态从一种状态过渡到另一种状态,当所有的有关对象到达某种特定的状态时就得程序的运行结果。

  使用类产生对象的过程也称为生成该类的一个实例。

因此,对象也可以定义为对象是类的一个实例。

定义类也意味着将该类的对象公用代码放在内存的公共区域中,而不必对每个对象都将它们的代码和数据重新进行一次描述,这减轻了程序员的劳动强度。

我们可以将一些常用对象定义放在一个公用库中,而在程序中需要该类的一个对象时,就创建该类的一个实例。

Windows已为程序员预定义了许多像按钮、滚动杠和对话框等对象的类,当程序员需要这些类的对象时,仅需创立该类的实例即可。

对于同一个类的不同对象,在建立对象时其初始状态不同,因而这些对象在屏幕上显示的位置、大小等属性也不相同,但同类的对象的操作是相同的(因为它们共用相同的方法)。

这也就是为什么不同的Windows应用程序对用户表现出一致的操作特性的原因之一。

1.5、句柄

  Windows应用程序中存在许多对象,例如选单、窗口、图标、内存对象、位图、刷子、设备对象和程序实例等,在Windows中,对象使用句柄进行标识,这样,通过使用一个句柄,应用程序可以访问一个对象。

  在Windows软件开发工具中,句柄被定义为一种新的数据类型。

在应用程序中,对句柄的使用一般只有赋值(句柄可以被赋以初始值、被改变为用于标识同类对象中的另一个对象和被用作函数的参数)、与NULL进行相等比较(判定一个句柄是否为一个有效的句柄)和与标识同类对象的另一个句柄进行相等比较(判定两个句柄是否标识同一个对象),没有其它的运算。

虽然在有的书中介绍说句柄是一个十六位的整数,但实际情况并不这样简单,它的长度将会随着不同的计算机平台和Windows的发展而有所变化,例如,在32位Windows中,句柄将是一个32位的数据,并且不是整数类型。

  一种通用句柄类型为HANDLE,在Windows3.1以前的版本中,它可被用于标识所有种类的对象,在Windows3.1中,部分地保留了这一特点,在本教程的程序中也有所反映。

在Windows3.1中,从HANDLE类型又派生出了一些新的句柄数据类型,每种类型的句柄用于标识一种类型的对象,下面是一些常见的句柄类型:

类型

说明

HANDLE

通用句柄类型

HWND

标识一个窗口对象

HDC

标识一个设备对象

手工艺制品是我国一种传统文化的象征,它品种多样,方式新颖,制作简单,深受广大学生朋友的喜欢。

当今大学生的消费行为表现在追求新颖,追求时尚。

追求个性,表现自我的消费趋向:

购买行为有较强的感情色彩,比起男生热衷于的网络游戏,极限运动,手工艺制品更得女生的喜欢。

HMENU

标识一个选单对象

加拿大beadworks公司就是根据年轻女性要充分展现自己个性的需求,将世界各地的珠类饰品汇集于“碧芝自制饰品店”内,由消费者自选、自组、自制,这样就能在每个消费者亲手制作、充分发挥她们的艺术想像力的基础上,创作出作品,达到展现个性的效果。

HICON

图1-3大学生偏爱的手工艺品种类分布标识一个图标对象

HCURSOR

我们熟练的掌握计算机应用,我们可以在网上搜索一些流行因素,还可以把自己小店里的商品拿到网上去卖,为我们小店提供了多种经营方式。

标识一个光标对象

HBRUSH

这里有营业员们向顾客们示范着制作各种风格炯异的饰品,许多顾客也是学得不亦乐乎。

据介绍,经常光顾“碧芝”的都是些希望得到世界上“独一无二”饰品的年轻人,他们在琳琅满目的货架上挑选,然后亲手串连,他们就是偏爱这种DIY的方式,完全自助在现场,有上班族在里面精挑细选成品,有细心的小女孩在仔细盘算着用料和价钱,准备自己制作的原料。

可以想见,用本来稀奇的原料,加上别具匠心的制作,每一款成品都必是独一无二的。

而这也许正是自己制造所能带来最大的快乐吧。

标识一个刷子对象

400-500元1326%HPEN

标识一个笔对象

标题:

大学生究竟难在哪?

—创业要迈五道坎2004年3月23日HFONT

经常光顾□偶尔会去□不会去□标识一个字体对象

HINSTANCE

附件

(一):

标识一个应用程序模块的一个实例

HLOCAL

标识一个局部内存对象

关于DIY手工艺制品的消费调查HGLOBAL

标识一个全局内存对象

1.6、数据类型及常量

  为便于开发Windows应用程序,Windows的开发者新定义了一些数据类型。

这些数据类型或是与C/C++中已有的数据类型同义,或是一些新的结构数据类型。

引入这些类型的主要目的是为便于程序员开发Windows应用程序,同时也是为了增强程序的可读性;另一个目的是为了便于程序将来能被移植到其它种类的计算机平台上或适应Windows将来的新版本的变化。

例如,本教程目前使用16位API(ApplicationProgramInterface),现在Windows的版本使用32位API,只要将HANDLE等句柄类型定义为32位长,然后重新编译程序,就可以很方便地将一个使用16位API的Windows应用程序改为使用32位API的程序,使其能运行在32位APIWindows上。

大部分的数据类型在Windows.h中定义,下面是在这个文件中定义的部分类型:

  #define  PASCAL     pascal

  #define  NEAR      near

  #define  FAR      far

  typedef  unsignedchar BYTE

  typedef  unsignedshort WORD

  typedef  unsignedlong DWORD

  typedef  long      LONG

  typedef  char     *PSTR

  typedef charNEAR   *NPSTR

  typedef  charFAR    *LPSTR

  typedef  void      VOID

  typedef  int      *LPINT

  typedef  LONG      (PASCALFAR*FARPROC)();

  在Windows.h中,使用typedef还定义了一些新的结构类型。

这些结构类型的名字也使用大写形式的标识符:

类型

说明

MSG

消息结构

WNDCLASS

窗口的类的结构

PAINTSTRUCT

绘图结构

POINT

点的坐标的结构

RECT

矩形结构

  我们在这里以类型MSG为例来说明类型的定义方法,对于其它类型,在以后用到时再作详细地说明。

类型MSG是一个消息结构,它的定义方式及其各域的含义如下:

  typedefstructtagMSG{

    HWND     hWnd;  //窗口对象的标识符,该条消息传递到它所标识的窗口上

    UINT   message;  //消息标识符,标识某个特定的消息

    WPARAM   wParam;  //随同消息传递的16位参数

    LPARAM   lParam;  //随同消息传递的32位参数

    DWORD    time;  //消息产生的时间

    POINT     pt;  //产生消息时光标在屏幕上的坐标

  }MSG;

  typedef MSG FAR *LPMSG;

  其中的POINT类型的定义是:

  typedef struct tagPOINT{

    intx;   /*X坐标*/

    inty;    /*Y坐标*/

  }POINT;

  typedef POINT FAR *LPPOINT;

  Windows.h在定义大部分类型的同时,还定义了该类型的指针类型。

例如,上例中的LPPOINT和LPMSG等,其中字母前缀LP表示远指针类型;若使用NP作为一个类型的前缀,则表示近指针类型;若使用P作为一个类型的前缀时,则表示一般的指针类型,这时由编译程序时所使用的内存模块决定这种指针是远指针或是近指针。

在Windows.h中说明的大部分指针类型都采用这里介绍的方法进行说明,例如,LPRECT,它表示一个RECT类型的远指针。

  在Windows.h中说明的大部分指针类型使用了C/C++的关键字const,如果一个指针类型的名字前缀为LPC、NPC或PC,则其中的字母C表示这种类型的指针变量所指向的变量不能通过该指针变量来修改,这种指针类型一般采用下述方法进行说明:

  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(LPPOINTlppt);

  ......

  LPCPOINTlpPoint;

  fun(lpPoint);

  编译器将指示这个函数调用语句是错误的。

所以,在一个函数不修改一个指针参数所指向的变量的情况下,最好将该参数说明为const指针,使const类型的指针也能用于该函数的参数。

Windows.h中说明的大部分函数使用了const指针参数。

  在Windows.h中,大多数语句是用于定义一个常量,例如:

  #denfine WM_QUIT 0X0012

  该语句用标识符WM_QUIT来表示编号为0X0012的消息。

每个常量由一个前缀和表示其含义的单词组成的标识符组成,两者之间用下画线隔开。

前缀表明这些常量所属的一般范畴。

下面是一些前缀和它们所属的范畴的说明。

类型

说明

CS

窗口类的风格(ClassStyle)

IDI

预定义的图标对象的标识符(IDentityofIcon)

IDC

预定义的光标对象的标识符(IDentityofCursor)

WS

窗口的风格(WindowsStyle)

CW

创建窗口(CreateWindows)

WM

窗口消息(WindowsMessage)

DT

绘制文本(DrawingText)

  在变量名的表示方法方面,Windows推荐使用一种称为“匈牙利表示法”的方法。

每个变量名用小写字母或描述了变量的数据类型的字母作为前缀,变量的名字紧跟其后,且用大写字母开始的单词(一个或多个单词)表示其含义,这样每个变量都能附加上其数据类型的助记符。

例如:

  WORD wOffset;  /*w表示WORD类型*/

  DWORDdwValue;  /*dw表示DWORD类型*/

  下面是Windows中常使用的一些字母前缀和它们所代表的数据类型:

类型

说明

b

BOOL,布尔类型

by

BYTE类型

c

char类型

dw

DWORD类型

fn

函数类型

i

整型

l

LONG类型

lp

远(长)指针(longpointer)

n

短整型

np

近(短)指针(nearpointer)

p

指针

s

字符串

sz

以'\0'结尾的字符串

w

WORD类型

x

short,用于表示X坐标时

y

short,用于表示Y坐标时

  Windows程序员也可以根据上述思想和使用目的,发明一些其他的前缀,但要注意,对这些前缀的使用必须保持前后一致。

在Windows中,所有的函数根据其用途来命名,它们一般由2到3个英文单词组成,每个单词的第一个字母大写,例如,函数CreateWindow(),由该函数的名字可以知道它的用途是创建一个窗口。

1.7、应用程序使用的一些术语

  本节介绍Winodws应用程序使用的一些术语及其相关概念,在后面的章节中介绍有关的内容时,再对其中的概念进行详细的讨论。

  1.7.1模块

  在Windows中,术语“模块”一般是指任何能被装入内存中运行的可执行代码和数据的集合。

更明确地讲,模块指的就是一个.EXE文件(又称为应用程序模块),或一个动态链接库(DLL—DynamicLinkingLibrary,又被称为动态链接库模块或DLL模块),或一个设备驱动程序,也可能是一个程序包含的能被另一个程序存取的数据资源。

模块一词也被用于特指自包含的一段程序。

例如,一个可单独编译的源文件,或该源文件被编译器处理之后所生成的目标程序。

当制作一个程序时,模块一词用于指被连接在一起的许多模块中的某个模块。

  Windows本身由几个相关的模块组成,WindowsAPI函数就是在Windows启动时装入内存中的几个动态链接库模块实现的。

其中的三个主要模块是USER.EXE(用于窗口管理等)、KERNEL.EXE(用于内存管理的多任务调度)和GDI.EXE(图形设备接口,用于图形输出等)。

  1.7.2应用程序

  一个Windows应用程序是被Windows调用或在Windows下运行的一个程序,这个程序可以调用静态连接库(也就是C的运行时间库)中的函数和DLL的函数,它也可以启动其它的应用程序。

一个应用程序在运行时的输入被Windows捕获,并以消息的形式传送到应用程序的活动窗口上。

一个应用程序的输出也是通过Windows进行的,所有的输出首先被送给Windows。

许多MS-DOS应用程序基本上占据整个计算机,并认为所有的计算机资源只属于该应用程序,应用程序告诉相对被动的MS-DOS应做什么。

在一个Windows应用程序中,Windows自身是非常主动的,并且和应用程序协同得非常紧密。

Windows管理着计算机的所有资源,并调度这些资源,使它们可为正在Windows上运行的所有应用程序共享。

  1.7.3任务和实例

  Windows将运行的应用程序实例作为不同的任务。

当一个应用程序的多个实例在运行时,它们也被Windows当作不同的任务。

Windows为一个模块的每一个实例都装入一个缺省数据段,但可执行代码只能装入一次。

也就是说,同一个模块的实例共享相同的代码,但有自己私用的数据段。

  对每一个模块、任务或实例,Windows分别使用一个句柄来标识它。

在窗口对象的私有数据存储区存储有一个应用程序的任务句柄、实例句柄和模块句柄。

任务句柄被Windows的任务调度程序用于进行任务调度。

通过模块句柄,Windows可以知道一个模块当前有多少实例正在运行。

同一个模块的不同实例有相同的模块句柄,但有不同的任务和实例句柄。

当Windows由于内存管理的需要而废弃了一个实例的代码段时,通过模块句柄,Windows可以从模块中重新装入这个实例所需的代码。

  1.7.4动态链接库

  DLL是一种有别于MS-DOS应用程序所使用的库模块(例如C的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1