//--------------------------------------------------------------------------------------
// Handle mouse button presses
//--------------------------------------------------------------------------------------
void CALLBACK OnMouse( bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown,
					   bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta,
					   int xPos, int yPos, void* pUserContext )
{
	POINT pos;

	GetCursorPos(&pos);

	Mouse::setState(MouseState(bLeftButtonDown, bRightButtonDown, nMouseWheelDelta, Point(pos.x, pos.y)));
}
main()
{
 int X,Y,m_state,y,a,b,i,j;


  Initgr();                        /* BGI初始化 */

  setcolor(WHITE);

 setwritemode(XOR_PUT);      /* 设定输入模式为异或模式 */
 MouseInit(0,X_max,0,Y_max);  /* 初始化鼠标 */
 a=X_max;b=Y_max;
 m_state=0;                   /* 初始化鼠标状态为移动状态 */
 DrawCursor(a,b);
 while(m_state!=2)             /* 如果没有点击右键 */
 {
   MouseState(&X,&Y,&m_state);     /* 获取鼠标当前状态与坐标值 */
   DrawCursor(a,b);                /* 通过异或输入模式删除之前的鼠标指针 */
   if(m_state==1)                   /* 如果鼠标左键点击 */
    {
       LineDrawFlag=TRUE;            /* 将跟随鼠标画线标志置为真 */
       if(0==PointNum)               /* 如果是第一次点击左键 */
         {
          x_Origin=a; y_Origin=b;
          x_Old=a;    y_Old=b;
          x_New=a;    y_New=b;
         }
         else                         /* 如果不是第一次点击鼠标左键 */
         {
          x_Old=x_New;
          y_Old=y_New;
          x_New=a;
          y_New=b;
          }


         PointNum++;               /* 记录鼠标左键点击次数,以便确定是否要跟随鼠标画线 */

         if((x_Origin-x_New) > -10 && (x_Origin-x_New) < 10 && (y_Origin-y_New) > -10
          && (y_Origin-y_New) < 10 &&  ((x_Origin-x_New)!=0 || (y_Origin-y_New)!=0))
           {                      /* 如果线画到离初始点足够近的地方 */

             LineDrawFlag=FALSE;     /* 将跟随鼠标画线标志置为假 */
             PointNum=0;              /* 鼠标点击次数清零 */
             x_New=x_Origin; y_New=y_Origin;    /* 将初始点的坐标值赋给当前点 */
           }

           setwritemode(OR_PUT);
           line(x_Old,y_Old,x_New,y_New);       /*  从前一点到当前点画线 */
           setwritemode(XOR_PUT);
    }

   DrawCursor(X,Y);   /* 在当前位置画鼠标指针 */
   a=X;
   b=Y;
}

  DrawCursor(X,Y);
  ScanlineSeedFill(X,Y,WHITE,12);

 getch();
closegraph();
}