8.3.5 鼠标的中断功能

鼠标是现在计算机系统中的一个常用输入设备,它为使用计算机带来了很大的方便,鼠标指针的各种表现形式还反映了系统(或应用程序)当前处于什么样的工作状态。许多计算机使用者为体现其个性化还选择各自喜欢的鼠标图形,所以,了解和掌握计算机系统对鼠标所提供的功能对理解鼠标的各种操作也是有一定的帮助。

1、鼠标中断的常用功能

BIOS系统提供了中断33H来实现鼠标中断功能,其常用的功能如下:

00H—初始化鼠标
01H—显示鼠标指针
02H—隐藏鼠标指针
03H—读取鼠标位置及其按钮状态
04H—设置鼠标指针位置
05H—读取鼠标按键信息
06H—读取鼠标按钮释放信息
07H—设置鼠标水平边界
08H—设置鼠标垂直边界
09H—设置图形鼠标形状
0AH—设置本文鼠标形状
0BH—读取鼠标移动计数
0CH—为鼠标事件设置处理程序
0FH—设置鼠标计数与象素比
10H—设置鼠标指针隐藏区域
14H—替换鼠标事件中断
18H—为鼠标事件设置替换处理程序
19H—读取替换处理程序的地址
1DH—为鼠标指针选择显示页
1EH—读取鼠标指针的显示页

有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅附录3之鼠标功能中断

2、鼠标指针的设置

鼠标指针主要有二种表现形式:文本鼠标和图形鼠标。文本鼠标又分为软指针和硬指针。软指针是用各种字符来作鼠标指针,而硬指针是用方块光标的大小来表示鼠标指针,其效果类似于INT 10H之功能01H——设置光标类型。

图形鼠标的表现形式与文本鼠标相比就显得更加丰富多彩,可用各种不同的指针形状来反映系统当前所处的工作状态和所能进行的操作。在Windows操作系统及其应用程序中使用了很多指针形状的变化来表达各种有用信息。

鼠标的文本软指针与图形指针的形成过程相一致,它需要两部分信息:象素掩码和光标掩码。其指针形成过程如下:

1)、用象素掩码与当前鼠标所处位置的象素信息进行“逻辑与”运算;
2)、光标掩码与步骤1的运算结果再进行“异或”操作,该操作所得到的16×16位的0/1信息就构成了当前鼠标指针的形状。

假设象素掩码为全0。全0的象素掩码与屏幕上的显示信息“逻辑与”后,所得结果仍为全0,全0的运算结果再和“光标掩码”进行“异或”操作,这时,所得结果显然与“光标掩码”完全一样,所以,看到的鼠标指针形状就是光标掩码所表达的指针形状。

综合上述,可得结论:若象素掩码为全0,那么,鼠标的形状就是16×16位光标掩码所表示的指针形状,鼠标所到之处就看不到该区域内(16×16点阵范围)的其它显示信息。

在Windows操作系统及其应用程序中,在16×16点阵范围内,除了看不见被各种形状指针覆盖的部分之外,还能看见其它小区域,这是因为鼠标的“象素掩码”取其“光标掩码”的反相点阵所致。感兴趣的读者可验证或证明之。

(1)、硬指针的设置

设置鼠标硬指针的中断功能使用方式:

MOV BX, 1 ;硬指针
MOV CX, 01H ;鼠标硬指针的起始扫描线
MOV DX, 0FH ;鼠标硬指针的结束扫描线
MOV AX, 0AH ;设置文本鼠标指针
INT 33H

(2)、软指针的设置

设置鼠标软指针的中断功能使用方式:

MOV BX, 0 ;软指针
MOV DL, 'A' ;用字符'A'作为鼠标指针符号
MOV DH, 07FH ;置鼠标的颜色
MOV CX, 0 ;置象素位掩码
MOV AX, 0AH
INT 33H ;设置文本鼠标指针

(3)、图形指针的设置

设置鼠标软指针的中断功能使用方式:

……
PMask DW 16 dup(?) ;象素位掩码,PMask可以是~CMask
CMask DW 16 dup(?) ;光标掩码,二者紧相邻
……
MOV AX, DS
MOV ES, AX
LEA DX, PMask ;ES:DX=象素位掩码的起始地址
MOV BX, 0
MOV CX, 0 ;在鼠标指针范围内,(0,0)点为指示点
MOV AX, 09H
INT 33H ;设置图形鼠标指针

3、鼠标功能的应用举例

例8.11 在屏幕的右上角动态显示文本鼠标的位置,即:鼠标的任何移动都将马上显示其所处位置,按鼠标左键结束程序的运行。

解:显示解答

例8.12 编写可随时修改文本鼠标指针符号的程序,即要求:在程序运行过程中,随时在键盘上按什么字符,即以该字符为鼠标指针符号。

解:显示解答

读者可把例8.11和8.12结合在一起,使之:一方面,可动态显示鼠标的位置,另一方面,也可随时修改文本鼠标的指针符号。

改变图形鼠标指针是许多计算机使用者体现其个性的方法之一,读者可参考例8.12和前面的“图形指针的设置”部分的叙述,编写一个显示自己设计的鼠标指针的程序。在学习了有关文件操作知识之后,还可利用现有的鼠标指针文件来显示鼠标指针。