0

我正在用 MFC 做一个小型绘图工具。

按下按钮捕捉原点,按下按钮捕捉新点,然后从原点到新点画一条线。

我已经创建了一个对话框。但是我不知道如何在按下按钮时同时显示原始点和新点。

画线代码及显示对话框如下:

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
    m_ptOrigin = point;

    CView::OnLButtonDown(nFlags, point);
}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
    CDC *pDC = GetDC();
    pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(point);
    ReleaseDC(pDC);

    CArgDlg object;  // Jump out a dialog
    object.DoModal();

    CView::OnLButtonUp(nFlags, point);
}

有人能帮我吗?

4

2 回答 2

2

将绘图代码从按钮处理程序移出到 OnDraw()。

我假设您只想在对话框中显示两个点的值?在对话框类中声明两个成员变量m_pt1m_pt2从这些值中填充静态/编辑控件OnInitDialog()

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{   m_ptEnd = point; // new member variable
    CRect rc(m_ptOrigin, m_ptEnd);
    InvalidateRect(&rc); // will invoke OnDraw()

    CView::OnLButtonUp(nFlags, point);

    CArgDlg object;  // Jump out a dialog
    object.m_pt1 = ptOrigin;
    object.m_pt2 = m_ptEnd;
    object.DoModal();
}
于 2013-09-05T12:22:17.477 回答
0

覆盖 OnDraw(),不要在按钮处理程序中开始绘制。关键是底层的win32 框架会跟踪何时需要绘制什么以及需要绘制什么,并在它要求您绘制时绘制它(即在OnDraw() 中)。

顺便说一句:我不确定你想用对话框实现什么,因为你现在在包含按钮处理程序的视图上画线,而不是在对话框中。

于 2013-09-05T11:40:39.220 回答