📄 mouse.c
字号:
/*鼠标应用程序*/
/*开发日期:2008-07-30*/
/*作者:李士伟*/
#include<stdio.h>
#include<graphics.h>
int InitMouse();
int ReadMouse();
void NewPosition();
void InitCursor();
void DrawCursor();
void InitGraph();
void DrawMat(char *mat,int matsize,int x,int y,int color);
char curimage[8]={0x60,0x70,0x78,0x7c,0x7e,0x7f,0x0c,0x0e};
/* 01100000b,
01110000b,
01111000b,
01111100b,
01111110b,
01111111b,
00001100b,
00001110b,
*/
void *ptrCurBackBuf;
void *ptrCurBuf;
int Buttons=0;
int PressButton=0;
int CurrentX=4,CurrentY=4;
void DrawMat(char *mat,int matsize,int x,int y,int color)
{
/*功能:在图形模式下输出一个汉字*/
int i,j,k,n;
n=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
for(i=0;i<n;i++)
for(k=0;k<8;k++)
if(mat[j*n+i]&(0x80>>k)) /*测试为1的位则显示*/
putpixel(x+i*8+k,y+j,color);
}
int InitMouse()
{
asm mov ax,0 /*鼠标复位并取状态*/
asm INT 33h
Buttons=_BX;
if(0==_AX)
{
printf("Mouse not found or Mouse driver not installed.\n");
return 0;
}
asm mov ax,07h /*;设置水平边界*/
asm mov cx,4
asm mov dx,638
asm int 33h
asm mov ax,08h /*;设置垂直边界*/
asm mov cx,4
asm mov dx,478
asm int 33h
InitCursor();
ReadMouse();
DrawCursor();
setcolor(WHITE);
line(4,4,636,4);
line(4,4,4,476);
line(4,476,636,476);
line(636,4,636,476);
return _AX;
}
void InitCursor()
{
int cursize;
cursize=imagesize(1,1,8,8);
ptrCurBackBuf=(void *)malloc(cursize);
getimage(1,1,8,8,ptrCurBackBuf);
DrawMat(curimage,8,1,1,WHITE);
cursize=imagesize(1,1,8,8);
ptrCurBuf=(void *)malloc(cursize);
getimage(1,1,8,8,ptrCurBuf);
}
void DrawCursor()
{
static int x1=1,x2=8,y1=1,y2=8;
putimage(x1,y1,ptrCurBackBuf,COPY_PUT);
x1=CurrentX-3;
x2=CurrentX+4;
y1=CurrentY-3;
y2=CurrentY+4;
getimage(x1,y1,x2,y2,ptrCurBackBuf); /*画鼠标前先备份背景*/
putimage(x1,y1,ptrCurBuf,COPY_PUT); /*画鼠标*/
}
int ReadMouse()
{
int xnew,ynew;
again:
if(kbhit()) return getch();
asm mov ax,3 /* ;调用3号功能读鼠标位置与按键状态*/
asm INT 33h
xnew=_CX;
ynew=_DX;
PressButton=_BX;
asm mov ax,xnew
asm cmp ax,CurrentX
asm jnz done
asm mov ax,ynew
asm cmp ax,CurrentY
asm jnz done
asm mov ax,PressButton
asm cmp ax,0
asm jnz done
asm jmp again
done:
CurrentX=xnew;
CurrentY=ynew;
return -1;
}
void NewPosition()
{
int ch;
ch=ReadMouse();
if(ch!=-1)printf("%c",ch);
DrawCursor();
}
void InitGraph()
{
int gdriver, gmode;
registerbgidriver(EGAVGA_driver);
detectgraph(&gdriver,&gmode);
initgraph(&gdriver,&gmode,"");
cleardevice();
}
void main()
{
InitGraph();
setbkcolor(BLUE);
InitMouse();
next: NewPosition();
asm jmp next
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -