使用MFC用鼠标画曲线,请问buttonup应该怎么设置?

使用MFC用鼠标画曲线,已知buttondown和mousemove,请问buttonup应该怎么设置?


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)
    {
        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: 在此添加消息处理程序代码和/或调用默认值
    
    CView::OnLButtonUp(nFlags, point);
}

参考GPT和自己的思路:在buttonup事件中,你可以添加一些代码来处理鼠标释放后的行为。在这种情况下,你可以在buttonup事件中实现曲线的绘制。具体的代码取决于你想要实现的特定曲线类型。例如,如果你想要绘制一条直线,则需要在buttonup事件中添加代码来计算起点和终点之间的距离,并在屏幕上绘制一条直线。如果你想要绘制一条光滑的曲线,则可以使用贝塞尔曲线算法来计算曲线。无论你想要实现什么类型的曲线,你需要添加一些代码来在buttonup事件中实现你的想法。

该回答引用于gpt与OKX安生共同编写:
  • 该回答引用于gpt与OKX安生共同编写:

在使用MFC用鼠标画曲线时,OnLButtonUp消息处理函数应该如下所示:

void CMyPolygonView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (m_bLButtonDown)
    {
        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);
}

在上述代码中,我们首先检测是否按下了鼠标左键。如果是,则将当前坐标点添加到存储所有点的容器中,并将m_bLButtonDown设为false,表示松开了鼠标左键。然后我们调用Invalidate函数刷新视图,使得新画的曲线能够显示出来。

需要注意的是,在OnLButtonDown函数中设置了m_bLButtonDown为true,表示鼠标左键已经按下。而在OnMouseMove函数中,我们只有在m_bLButtonDown为true时才进行绘制,这样可以避免当鼠标未按下时也进行绘制的情况。

希望以上解答能够对您有所帮助。