}
进行连接初始化:首先开启开始连接状态
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] 下一页