鼠标器原理及应用.ppt_第1页
鼠标器原理及应用.ppt_第2页
鼠标器原理及应用.ppt_第3页
鼠标器原理及应用.ppt_第4页
鼠标器原理及应用.ppt_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

计算机图形学 中南大学国土与测绘系 主讲: 向南平 教授 E-mail: 第3章 鼠标器原理及应用 3.1 鼠标的安装 3.2 鼠标光标的显示 3.3 鼠标器功能 3.4 支持鼠标的交互式图形软件 3.1 鼠标器原理 3.1.1 鼠标驱动程序的安装 打开计算机后, 即使你已经配置了鼠标器, 也还必须安 装鼠标驱动程序,才能使鼠标器开始工作。鼠标驱动程序有两类 :其一为可执行的驱动程序,如:MOUSE.COM;其二为设备驱动 程序,即 MOUSE.SYS。两种方式都可以配置在dos系统配置文件 config.sys中。 鼠标驱动程序装入内存后,其起始地址固定在51*4204 ,该地址与中断向量51(十六进制0x33)相对应。因此,凡与鼠标 有关的操作都是通过对0x33号中断进行。 一旦安装好了鼠标驱动程序, 每当移动鼠标或按下鼠标器 上一个按键时, 均会产生一次中断33H。鼠标驱动程序处理这次中 断,设置相应的内部变量,然后返回。当鼠标处于静止状态时, 驱动程序不返回任何信息,计算机的性能不会受到任何影响。 3.1 鼠标器原理 3.1.2 鼠标光标 当用键盘作为输入设备时,屏幕上有一个光标表示当前光标位 置。当用鼠标作为输入设备时,也应该有一个类似的光标作为辅助, 以 表示光标的位置, 在Microsoft的鼠标库函数中定义了缺省的光标形状 : 在图形方式下是一个箭头, 在文本方式下是一个亮块。还可以通过鼠 标函数控制鼠标光标的点亮和熄灭。 虽然鼠标与显示屏幕在物理上是彼此分开的,但可以把鼠标想 象为与屏幕是连在一起的,这是因为鼠标驱动程序自动地维护着一个计 算器,借以指示鼠标光标当前在什么位置。当用户移动鼠标时,光标在 屏幕上也随之向同一方向移动。鼠标移动的距离是以“mickey“为单位进 行量度的, 一个“mickey“等于1/200英寸。当然,对用户来说,并不需要 知道鼠标移动的实际距离, 因为使用鼠标设备仅仅只是一个相对位置定 标设备。 3.1 鼠标器原理 3.1.3 虚拟屏幕 要了解鼠标器是如何与显示器通讯,还必须了解虚拟屏幕的概念。 所谓虚拟屏幕,是对不同显示器上提供的显示方式的一种简化。虚拟屏 幕可以看作是对物理屏幕的一个抽象。对程序员来说,你只需要了解虚 拟屏幕的坐标位置。鼠标驱动程序会把虚拟屏幕按着当前的显示方式翻 译到物理屏幕。 鼠标驱动程序把虚拟屏幕当做由水平和垂直排列的点组成的矩阵。 虚拟屏幕的大小等于当前显示模式的屏幕分辨率。如:在CGAHI模式下 ,屏幕分辨率为640200,虚拟屏幕的坐标范围即为(0,0)到(640 ,200)。 你可以用中断10H启动计算机的ROM BIOS来设置或改变屏幕显示方式 。在使用中断10H时, 必须提供一个功能号来指明中断10H所执行的操作 。 当程序调用中断10H改变屏幕方式时,鼠标驱动程序载取这个中断, 并决定采用什么样的虚拟屏幕。或者, 当程序调用鼠标器 0 号功能(把 鼠标器参数设为缺省值)时, 鼠标器软件也会判别当前显示方式并选择 合适的虚拟屏幕。 3.2 鼠标光标的显示 在IBM 系列微机上有多种显示卡和显示器。不 同的屏幕显示方式和屏幕特性会影响鼠标光标在屏幕 上的显示和移动。 屏幕显示方式定义了屏幕的象素个数。每个象 素是屏幕上的独立点。屏幕显示方式取决于显示卡的 类型。有些显示卡既能显示亮点(即所谓“图形方式 ”),也能显示亮块(既所谓“文本方式”)。虽然 各种方式有自己的特点,但鼠标驱动程序对同一类方 式采用一致的方法。 3.3 鼠标器功能 鼠标驱动程序包含35个输入输出操作。每个操作( 通常称为功能)都是通过给驱动程序发出一个特殊的 指令,使应用程序和鼠标器硬件通讯。有些函数是向 鼠标器查询状态的,如按键状态等。另一些功能则控 制鼠标器接口的特性,如光标的分辨率、光标形状及 光标移动范围等。应用程序只须把所需功能告诉驱动 程序,而由驱动程序做具体工作。 3.3.1 功能0:鼠标初始化 在能够使用鼠标之前, 必须对鼠标进行初始化。这要通 过0号功能完成。调用此功能后,鼠标驱动程序重置, 即初 始化为各个缺省值,并在发现鼠标硬件和驱动程序时,在 AX寄存器返回-1。否则,返回0。因此,通过0号功能还可 以测试鼠标器及鼠标驱动程序是否存在。 调用格式: 输入参数:AX=0 返回信息:若AX0,表示鼠标未安装好,若AX1, 表示鼠标按照成功,BX等于鼠标器的按键数。 例31测试鼠标安装情况, 并显示检测结果。 #include union REGS regs; int msinit_0(int Xlo, int Xhi, int Ylo, int Yhi) int recored; regs.x.ax = 0; /* 调0号功能,初始化鼠标 */ int86(0x33, recored = regs.x.ax; /* 返回初始结果 */ if (recored = 0) printf(“ No mouse or Mouse driver not installed.n“); return 0; /* 初始化不成功 */ else return record; /* 初始化成功 */ 联合类型REGS的类型定义在DOS.H中,该变量regs用来模拟机器的寄存器 AX,BX,CX,DX的使用。int86()函数是 Turbo C提供的中断调用函数,其原型为: int int86(int intno, union REGS *inregs, union REGS *outregs); 参数intno, intregs, outregs分别表示中断号、输入寄存器、输出寄存器。 若鼠标初始化成功,则函数同时设定鼠标移动范围为X方向(XloXhi)、Y方向 (YloYhi),这实际上同时也限定了鼠标器返回值的范围。 3.3.2 功能3: 读鼠标状态及鼠标位置 一旦鼠标初始化成功,就可通过号中断来获取任意时刻的鼠 标器位置和状态。 鼠标器功能3 返回鼠标器左右键的状态, 及光标在屏幕上的水 平和垂直坐标。 按键状态是一个整数值,低位字节表示左键, 高位字节表示右 键, 即:按键状态为1时表示左键按下, 为2 时表示右键按下, 当没 有键按下时状态为0(使用三键鼠标时,中间键的状态值为4)。 调用格式: 输入参数:AX3 返回信息:CX返回鼠标位置的X坐标 DX返回鼠标位置的Y坐标 BX返回鼠标按键状态: BX0 没有健按下, BX1 左健被按下; BX2 右键被按下, BX3 左右健同时被按下。 以下的函数msget()就是调用功能来读取鼠标状态和鼠标位置。 void msget(int *px, int *py, int *pbuttons) regs.x.ax = 3; /* 调用鼠标器功能3 */ int86(0x33, *px = regs.x.cx; /* 返回鼠标位置 x */ *py = regs.x.dx; /* 返回鼠标位置 y */ *pbuttons = regs.x.bx; /* 返回鼠标状态 */ 在一个使用鼠标器的图形系统运行的全过程中,该函数将会被反 复调用,以确定鼠标在任意时间的状态和位置。当用整型变量 x,y,buttons调用函数时: msget( 就会把当前的鼠标位置x和y值及一个非零整数(当某个鼠标键被按 下时)分别放入变量x,y和buttons中。 在使用鼠标进行输入时,有一个不可忽视的问题:在使用 鼠标时,你可以编一个简单的循环, 不断的调用msget()以 获取当前坐标,但这样做是很糟的,因为这会不断的产生一 列一列的相同的重复值。而我们所希望的应是这样一个函数 ,它只是在有新的值变化时才返回x和y的值(或鼠标键的状态 )。这就是说,需要使用一个等待(延迟)循环,此循环只有在 当x,y或鼠标键的状态改变时才终止退出。但是,如果只简单 地实施和使用这样技术的话,又会引起另一个问题:如果等 待循环只有在鼠标的状态改变之后才能终止,那么,当你在 键盘上操作以希望计算机执行某个任务时,机器则根本不会 作任何响应。因此,实际使用时又在等待循环内加入一个标 准函数kbhit()。见下页示例。 标准鼠标函数 int msread(int *px, int *py, int *pbuttons) static int but0 = -1; /* 静态变量保存先前鼠标状态 */ static int x0 = -1, y0 = -1; /* 静态变量保存先前鼠标位置 */ do if (kbhit() return getch(); /* 当有键盘操作时退出循环 */ msget(px, py, pbuttons); /* 读鼠标状态及鼠标位置 */ while (*px=x0 /* 当鼠标状态改变或位置改变时终止循环 */ but0 = pbuttons; /* 将鼠标状态保存到静态变量中 */ x0 = *px; y0 = *py; /* 将鼠标位置保存到静态变量中 */ return -1; /* 无键盘操作,仅有鼠标器操作时返回 -1 */ 该函数定义了三个静态整型变量:x0,y0,but0,用以保存先前的鼠标位 置及鼠标状态。 在循环体内,先判断是否有击键,若有就由函数getch()返回键 码。否则读鼠标,仅当鼠标位置及状态均有变化时,才退出循环,并将新的鼠标 位置和状态保存到三个静态变量中,然后函数返回一个非零值。 3.4 支持鼠标的交互式图形软件 下面的例子Example2.C将说明如何使用鼠标移动屏幕上的光标,并通过 移动鼠标或从键盘输入端点坐标来移动光标画线。 在函数

温馨提示

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

评论

0/150

提交评论