
标题: c语言开发鼠标驱动问题 [打印本页]
作者: yueluck 时间: 2007-6-14 16:45 标题: c语言开发鼠标驱动问题
问题在于:1鼠标留下的痕迹不能消除2.鼠标范围.我真的不懂,谢谢好心人.
/* Note:Your choice is C IDE */
#include "stdio.h"
#include"graphics.h"
#include<dos.h>
#define ture 1
#define false 0
int mouse_installed=false;
char wen16K[]={
/* 以下是 '温' 的 16点阵楷体_GB2312 字模,32 byte */
0x00,0x00,0x00,0xF0,0x27,0x10,0x14,0xD0,
0x03,0x20,0x82,0x60,0x41,0x80,0x00,0x30,
0x17,0xD0,0x25,0x50,0x25,0x50,0x45,0xFC,
0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
char du16K[]={
/* 以下是 '度' 的 16点阵楷体_GB2312 字模,32 byte */
0x01,0x00,0x00,0x80,0x00,0xF0,0x1F,0x40,
0x12,0x70,0x17,0xC0,0x12,0x40,0x13,0x80,
0x10,0xC0,0x27,0x40,0x22,0x40,0x41,0x80,
0x42,0x60,0x9C,0x3E,0x00,0x00,0x00,0x00,
};
void drawmat(char *mat,int matsize,int x,int y,int color);
int InitMouse(void);
int ShowMouse(void);
int HideMouse(void);
int GetMouseXY(int *x,int *y);
int SetMouseXY(int x,int y);
int GetPressInfo(int button);
int GetReleaseInfo(int button);
int SetXRange(int min,int max);
int SetYRange(int min,int max);
main()
{
int g=DETECT,m;char *chara,x,y,a=0,b=0,mouse_buttons;
initgraph(&g,&m,"");setviewport(0,0,639,479,0);
mouse_buttons=InitMouse();
if(mouse_installed==false)
{
printf("Mouse NOT installed!\n");
printf("Program finished!\n");
exit(-1);
}
/*ShowMouse();*/
setwritemode(0);
ellipse(120,120,0,360,30,20);setcolor(1);
ellipse(120,120,0,360,29,19); setfillstyle(1,1);
fillellipse(120,120,28,18);drawmat(wen16K,16,102,115,15);drawmat(du16K,16,118,115,15);
setcolor(4);settextstyle(0,0,2);
sprintf(chara,"%c",24);
outtextxy(136,115,chara);circle(a,b,3);
while(!kbhit())
{
GetMouseXY(&x,&y);
if(a!=x&&b!=y){setcolor(0);
circle(a,b,3);}setcolor(15);
if(x<0)x=0;
if(y<0)y=0;
if(x>639)x=639;
if(y>479)y=479;
circle(x,y,3);
a=x;b=y;
if(GetPressInfo(0)==1)
{
}
if(GetReleaseInfo(0)==1)
{
}
if(GetPressInfo(mouse_buttons-1)==1)
{
}
if(GetReleaseInfo(mouse_buttons-1)==1)
{
}
gotoxy(40,3);
printf("Mouse X:%-d",x);
gotoxy(40,4);
printf("Mouse Y:%-d",y);
}
}
void drawmat(char *mat,int matsize,int x,int y,int color)
/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/
{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(void)
{
union REGS r;
r.x.ax=0;
int86(0x33,&r,&r);
if(r.x.ax==0xffff)
mouse_installed=ture;
else
mouse_installed=false;
return(r.x.bx);
}
int ShowMouse(void)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0001;
int86(0x33,&r,&r);
return(0);
}
int HideMouse(void)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0002;
int86(0x33,&r,&r);
return(0);
}
int GetMouseXY(int *x,int *y)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0003;
int86(0x33,&r,&r);
*x=r.x.cx;
*y=r.x.dx;
return(0);
}
int SetMouseXY(int x,int y)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0004;
r.x.cx=x;
r.x.dx=y;
int86(0x33,&r,&r);
return(0);
}
int GetPressInfo(int button)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0005;
r.x.bx=button;
int86(0x33,&r,&r);
return(r.x.bx);
}
int GetReleaseInfo(int button)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0006;
r.x.bx=button;
int86(0x33,&r,&r);
return(r.x.bx);
}
int SetXRange(int min,int max)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0007;
r.x.cx=min;
r.x.dx=max;
int86(0x33,&r,&r);
return(0);
}
int SetYRange(int min,int max)
{
union REGS r;
if(mouse_installed==false)
return (-1);
r.x.ax=0x0008;
r.x.cx=min;
r.x.dx=max;
int86(0x33,&r,&r);
return(0);
}