龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

橡皮筋画线法

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
在这里我用STRUCT和指向函数的指针定义结合实现了模拟鼠标类,并用它来写了橡皮筋画线法 #include #include #include typedef struct { void (*Inits)();/*初始化鼠标驱动*/ int (*MButton)();/*按键位置与按

在这里我用STRUCT和指向函数的指针定义结合实现了模拟鼠标类,并用它来写了橡皮筋画线法

#include

  #include

  #include

  typedef struct

  {

   void (*Inits)();/*初始化鼠标驱动*/

   int (*MButton)();/*按键位置与按键状态*/

   void (*MouseIco)();/*画鼠标光标*/

   int x;/*横向坐标*/

   int y;/*竖向坐标*/

   int ox;

   int oy;

   int button;/*按键标志*/

  }MOUSE;/*鼠标类*/

  void mInits();

  int mMButton();

  void mMouseIco();

  union REGS rg;

  int main()

  {

   MOUSE *pM,mouse;

   int graphdrive=0,graphmode=0;

   int tracking=0,x1,y1,ox1,oy1;

   pM=&mouse;

   pM->Inits=mInits;

   pM->MButton=mMButton;

   pM->MouseIco=mMouseIco;

   initgraph(&graphdrive,&graphmode,"");

   setbkcolor(1);

   setwritemode(1);/*画线模式*/

   pM->Inits(&pM->x,&pM->y);

   pM->ox=pM->x;

   pM->oy=pM->y;

   do

   {

   pM->button=pM->MButton(&pM->x,&pM->y);

   pM->MouseIco(&pM->x,&pM->y,&pM->ox,&pM->oy);

   if(pM->button==1)

   {

   if(!tracking)/*捕捉开关*/

   {

   ox1=x1=pM->x;

   oy1=y1=pM->y;

   tracking=1;

   }

   if(pM->x!=ox1pM->y!=oy1)

   {

   line(x1,y1,ox1,oy1);

   ox1=pM->x;

   oy1=pM->y;

   line(x1,y1,pM->x,pM->y);

   }

   }

   else tracking=0;

   }while(pM->button!=3);

  }

  void mInits(int *mx,int *my)

  {

   rg.x.ax=0;

   int86(0x33,&rg,&rg);

   if(rg.x.ax==0)

   exit(1);

   rg.x.ax=7;

   rg.x.cx=2;

   rg.x.dx=640;

   int86(0x33,&rg,&rg);

   rg.x.ax=8;

   rg.x.cx=2;

   rg.x.dx=480;

   int86(0x33,&rg,&rg);

   rg.x.ax=4;

   *mx=rg.x.cx=640/2;

   *my=rg.x.dx=480/2;

   int86(0x33,&rg,&rg);

   rectangle(rg.x.cx-2,rg.x.dx-2,rg.x.cx+2,rg.x.dx+2);

  }

  int mMButton(int *lx,int *ly)

  {

   rg.x.ax=3;

   int86(0x33,&rg,&rg);

   *lx=rg.x.cx;

   *ly=rg.x.dx;

   return rg.x.bx;

  }

  void mMouseIco(int *x,int *y,int *oldx,int *oldy)

  {

   if(*x!=*oldx*y!=*oldy)

   {

   rectangle(*oldx-2,*oldy-2,*oldx+2,*oldy+2);

   *oldx=*x;

   *oldy=*y;

   rectangle(*x-2,*y-2,*x+2,*y+2);

   }

  }

  

  

精彩图集

赞助商链接