1

我需要帮助来制作某个 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)。如果有人可以帮助我,我将不胜感激(我怀疑可能有一种不同的、更简单的方法)。提前致谢。

4

2 回答 2

1

如果你想从同一个事件中获得两个结果,你必须保留一个状态变量来跟踪点击是什么。

换句话说,你CsemDoc应该有一个a_posb_pos成员,和CsemView一个bool is_b,初始化为假。

OnLButtonDow方法应该:类似于

if(!is_b)
{ set the a_pos; is_b = true; }
else
{ set the b_pos; is_b = false; invalidate the draw; }
于 2013-01-12T21:14:56.063 回答
0

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

希望这可以帮助!

于 2013-01-12T21:14:47.767 回答