MFC鼠标画曲线,两条曲线自动“相连”

使用MFC鼠标画曲线,以下程序运行之后:


```c++
void CMyPolygonView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    m_pt.m_x = point.x;
    m_pt.m_y = point.y;

    m_bLButtonDown = true;

    MyPoint pt;
    pt.m_x = point.x;
    pt.m_y = point.y;
    m_poly.m_vecPt.push_back(pt);

    Invalidate();

    CView::OnLButtonDown(nFlags, point);
}
void CMyPolygonView::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (m_bLButtonDown==true)
    {
        MyPoint pt;
        pt.m_x = point.x;
        pt.m_y = point.y;
        m_poly.m_vecPt.push_back(pt);
        Invalidate();
    }
    CView::OnMouseMove(nFlags, point);
}

void CMyPolygonView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (m_bLButtonDown==true)
    {
        MyPoint pt;
        pt.m_x = point.x;
        pt.m_y = point.y;
        m_poly.m_vecPt.push_back(pt);
        m_bLButtonDown = false;
    }
    Invalidate();
    CView::OnLButtonUp(nFlags, point);
}

出现了以下问题:

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/111966217976126.png "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/67467621797614.png "#left")
即前一条曲线的终点和后一条曲线的起点自动连接为一条直线,请问这种情况该如何避免,使得两条曲线独立开来?

参考GPT和自己的思路:您可以在绘制曲线时,判断绘制的点是否与上一个点重合。如果重合,则不将该点加入曲线的点集中。这样可以避免相邻两条曲线相连的情况。代码示例如下:

void CMyPolygonView::OnMouseMove(UINT nFlags, CPoint point)
{
    if (m_bLButtonDown == true)
    {
        MyPoint pt;
        pt.m_x = point.x;
        pt.m_y = point.y;

        // 判断与上一个点是否重合
        if (m_poly.m_vecPt.size() < 1)
        {
            m_poly.m_vecPt.push_back(pt);
        }
        else
        {
            MyPoint lastPt = m_poly.m_vecPt.back();
            if (pt.m_x != lastPt.m_x || pt.m_y != lastPt.m_y)
            {
                m_poly.m_vecPt.push_back(pt);
            }
        }

        Invalidate();
    }

    CView::OnMouseMove(nFlags, point);
}

需要注意的是,在结束绘制后,需要清空点集以便下一次绘制。可以在 OnLButtonUp 函数中添加以下代码:

m_poly.m_vecPt.clear();