MFC画线

时间:2013-01-12 21:04:28

标签: c++ visual-c++ mfc

我需要帮助制作某个MFC程序。我需要制作一个程序,以下列方式绘制一条线:用户通过左键单击选择起始点,然后通过左键单击第二次选择最终点,之后连接点并绘制线。我已经设法得到了第一个坐标:

void CsemView::OnLButtonDown(UINT nFlags, CPoint point)
{
    CsemDoc* pDoc= GetDocument();
    // TODO: Add your message handler code here and/or call default 
    pDoc->a_pos=point;
    Invalidate();
    CView::OnLButtonDown(nFlags, point);
}

问题是,我不知道如何通过第二次左键单击得到第二个坐标。我已经设法通过使用双左键单击功能(并将pDoc-> b_pos = point;放在其中)来实现,但这不是我应该做的事情。 (我把第一个坐标放入MoveTo,第二个放入LineTo)。如果有人可以帮助我,我将不胜感激(我怀疑可能有一种不同的,更简单的方法)。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果你想从同一个事件得到两个结果,你必须保留一个状态变量来追踪它的点击。

换句话说,您的CsemDoc应该有a_posb_pos成员,CsemViewbool is_b,初始化为false。

OnLButtonDow方法应该:类似于

if(!is_b)
{ set the a_pos; is_b = true; }
else
{ set the b_pos; is_b = false; invalidate the draw; }

答案 1 :(得分:0)

你可以将每个LButtonDown上的鼠标坐标推到一个向量上,画出P [i]和P [i + 1]之间的线条,然后在RButtonDown上你可以停止记录之后的点数,不再需要额外的将绘制线条。像任何绘图工具箱一样有一个单独的按钮来开始绘图,以便之后的任何LButtonDown事件都会被推送到矢量。

希望这有帮助!