📄 8-1.c
字号:
#include"graphics.h"
#include"dos.h"
/*--------显示鼠标光标---------*/
void ShowMouse()
{
union REGS inregs,outregs;
inregs.x.ax=1; /*-------赋值为1,以便调用显示光标功能-------*/
int86(0x33,&inregs,&outregs); /*-------调用0x33号中断中的显示光标功能------*/
}
/*-------获取鼠标位置及按键状态信息-----------*/
void GetMouseState(int *state,int *x,int *y)
{
union REGS inregs,outregs;
inregs.x.ax=3; /*-------赋值为1,以便调用显示光标功能-------*/
int86(0x33,&inregs,&outregs);
*state=outregs.x.bx; /*----获得鼠标按键状态-----*/
*x=outregs.x.cx; /*----获得鼠标光标横坐标---*/
*y=outregs.x.dx; /*----获得鼠标光标纵坐标---*/
}
/*--------画"十"字型的鼠标光标------*/
void DrawMouse(int x,int y,int color)
{
setcolor(color);
line(x-5,y,x+5,y);
line(x,y-5,x,y+5);
}
main()
{
int i,j;
int gd=DETECT,gm;
int MouseState,x,y,new_x,new_y,old_x,old_y;
char *str;
initgraph(&gd,&gm,"c:\tc\tc");
while(MouseState!=0x0002) /*当鼠标状态为按下右键时则退出循环*/
{
ShowMouse(); /*------显示鼠标-------*/
GetMouseState(&MouseState,&x,&y); /*--------获取鼠标状态信息-----------*/
printf("\r[%3d,%3d]",x,y);
/*在屏幕顶行显示鼠标坐标。控制符"\r"表示总在顶行输出*/
switch(MouseState)
{
case 0x0001: /*-------当鼠标左键按下时--------*/
old_x=x;
old_y=y; /*-----初使时定义旧坐标为鼠标左键按下时的坐标*/
DrawMouse(old_x,old_y,15); /*---画"十"字型鼠标光标-----*/
while(MouseState!=0x0000) /*-----如果鼠标左键释放则退出循环-------*/
{
GetMouseState(&MouseState,&new_x,&new_y);
/*---重新读取鼠标状态,并将按键状态赋给整型变量MouseState,
而当前鼠标坐标位置则赋给(new_x,new_y)-----*/
printf("\r[%3d,%3d]",new_x,new_y); /*---输出新的鼠标位置---*/
if(new_x!=old_x || new_y!=old_y) /*---如果当前鼠标坐标发生改变---*/
{
setcolor(0);
DrawMouse(old_x,old_y,0);
/*用背景色将原位置的"十"字型鼠标光标擦去*/
line(x,y,old_x,old_y); /*用背景色将原直线擦去*/
setcolor(15); /*设置画线颜色为15*/
line(x,y,new_x,new_y);
/*从鼠标按下位置到新的当前鼠标位置画一条直线*/
DrawMouse(new_x,new_y,15);
/*在新的当前鼠标位置画"十"字型鼠标光标*/
old_x=new_x;
old_y=new_y; /*将新的当前鼠标位置作为旧的鼠标位置*/
}
}
DrawMouse(old_x,old_y,0); /*画线后将"十"字型鼠标光标擦去*/
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -