鼠标的控制可以应用于图形模式和文本模式。在初始图形模型时,首先调用initgraph(),从文本模式切换到图形模式。在初始时,将用到DETECT 宏,它将令initgraph()函数自动选择最高的图形支持模式。关于图形模式请参考其它书籍,这里不是重点。
鼠标的调用是通过调用中断51实现的,而它的状态控制是通过AX寄存器实现的。
中断码
控制字
行为
51
0
初始化鼠标获得其状态 调用:AX = 0 返回: AX = FFFFh 不支持 鼠标
Ax = 0 支持鼠标
51
1
显示鼠标箭头 调用:AX = 1 返回:空
51
2
隐藏鼠标箭头 调用: AX = 2 返回: 空
51
3
获取鼠标位置和状态 调用:AX = 3 返回: BX = 鼠标状态
值 状态
0 没有按键按下
1 左键按下
2 右键按下
3 中键按下 CX = x 坐标
DX = y 坐标
51
4
设置鼠标位置
调用: AX = 4 CX = x 坐标
DX = y 坐标
返回: 空
51
7
设定x轴移动范围 调用: AX = 7 CX = 最小 x 坐标
DX = 最大 x 坐标
返回: 空
51
8
设定y轴移动范围 调用: AX = 8 CX = 最小 y 坐标
DX = 最大 y 坐标
返回: 空
给出两个例子:
例一:
#include<graphics.h> #include<stdio.h> #include<conio.h> #include<dos.h> union REGS in,out; int callmouse() { in.x.ax=1; int86(51,&in,&out); return 1; } void mouseposi(int &xpos,int &ypos,int &click) { in.x.ax=3; int86(51,&in,&out); click=out.x.bx; xpos=out.x.cx; ypos=out.x.dx; } int mousehide() { in.x.ax=2; int86(51,&in,&out); return 1; } void setposi(int &xpos,int &ypos) { in.x.ax=4; in.x.cx=xpos; in.x.dx=ypos; int86(51,&in,&out); } int main() { int x,y,cl,a,b; clrscr(); int g=DETECT,m; initgraph(&g,&m,"c:\tc\bgi"); a=100; b=400; setposi(a,b); callmouse(); do { mouseposi(x,y,cl); gotoxy(10,9); printf("\n\tMouse Position is: %d,%d",x,y); printf("\n\tClick: %d",cl); printf("\n\tPress any key to hide the mouse"); }while(!kbhit()); getch(); mousehide(); printf("\n\n\tPress any key to Exit"); getch(); }
例二
#include<graphics.h> #include<stdio.h> #include<conio.h> #include<dos.h> union REGS in,out; int callmouse() { in.x.ax=1; int86(51,&in,&out); return 1; } void restrictmouseptr(int x1,int y1,int x2,int y2) { in.x.ax=7; in.x.cx=x1; in.x.dx=x2; int86(51,&in,&out); in.x.ax=8; in.x.cx=y1; in.x.dx=y2; int86(51,&in,&out); } int main() { int x,y,cl,a,b; clrscr(); int g=DETECT,m; initgraph(&g,&m,"c:\tc\bgi"); rectangle(100,100,550,400); callmouse(); restrictmouseptr(100,100,550,400); getch(); }
|