}
 进行连接初始化:首先开启开始连接状态
     IsLink=TRUE;
     然后用全局变量pNodeStart指向当前元件
     pNodeStart=pNodeNow
全局变量startpoint记录当前触点中心坐标(这时要进行坐标的转换)
     startpoint.x=pNodeNow->Orgpoint .x +circlepoint.x;
     startpoint.y=pNodeNow->Orgpoint .y +circlepoint.y;
     全局变量startput记录当前触点类别
     startput=put;
     最后lastpoint用于鼠标移动时擦除线效果
     lastpoint=startpoint;
 鼠标抬起模块
其算法如图9
 
图9
代码如下:
void CMyView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 // TODO: Add your message handler code here and/or call default
 
 if(IsLink)
 {
  //首先擦除从startpoint到point
   CClientDC clientDC(this);
   CClientDC* pDC=&clientDC;
    
   CPen whitepen(PS_SOLID,1,RGB(255,255,255));
   CPen* pOldPen;
   pOldPen=clientDC.SelectObject (&whitepen);
   clientDC.MoveTo (startpoint);
   clientDC.LineTo (point);
   clientDC.SelectObject (pOldPen);
   //重绘所有输入结点前的序号
   redrawnum();
   //重绘连接线
   LinkLineRedraw(startpoint,point);
   //重绘物件
   lineRedraw(startpoint,point);
  if(IsDrawCircle)
   //用全局变量pNodeCurrent记录终点连接的物体
   pNodeCurrent=pNodeNow;
   //用全局变量currentput记录终点连接的触点
   currentput=put;
   //用全局变量currentpoint记录终点触点的中心坐标
   currentpoint.x=pNodeNow->Orgpoint .x +circlepoint.x;
   currentpoint.y=pNodeNow->Orgpoint .y +circlepoint.y;
   //IsTwoObjectsCanLink()函数判断两个物件是否能连接
   if(IsTwoObjectsCanLink())
   {
    //先擦除圆圈
//EraserMyCircle();没有必要,只要鼠标移开时重绘连接线就可
    //开始两个物件的画图连接
    LineLink();
    //开始真正连接:指针连接
    RealLink();
   //关闭连接状态:
   IsLink=FALSE;
 }
 CView::OnLButtonUp(nFlags, point);
}
 判断两个元件是否可以连接
BOOL CMyView::IsTwoObjectsCanLink()
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页