Board logo

标题: 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);   
  }