//-------------------------------------------------------------------------------------- // 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(); }