MFC VS2010和VC ++ 6.0中的绘制线不会得到相同的结果

时间:2012-02-08 05:00:50

标签: visual-c++ mfc

我这些天一直在学习MFC。我想在VC ++ 6.0和VS2010中使用MoveTo()和LineTo()函数绘制线条,但似乎它在vs2010中不起作用。我只添加两个窗口单个文档项目中的消息处理程序,WM_LBUTTONDOWN和WM_LBUTTONUP。 这是VC ++ 6.0中的代码:

CPoint m_ptOrign;
void CStyleView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    m_ptOrign=point;
    CView::OnLButtonDown(nFlags, point);
}

void CStyleView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
    dc.MoveTo(m_ptOrign);
    dc.LineTo(point);
    CView::OnLButtonUp(nFlags, point);
}

以下是vs2010中的代码:

CPoint m_ptOrign;
void CStyleView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    m_ptOrign=point;
    CView::OnLButtonDown(nFlags, point);
}
void CStyleView::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);

    dc.MoveTo(m_ptOrign);
    dc.LineTo(point);

    CView::OnLButtonUp(nFlags, point);
}

我添加到两个项目的代码是相同的。当我释放左按钮时,该行会立即显示在vc ++ 6.0项目中,但它不会出现在vs 2010 mfc项目中。 如果vs 2010项目的窗口大小或位置发生更改,则该行会显示为已删除。 但是当我在vs 2010项目中使用dc.Rectangle(CRect(m_ptOrign,point))时,它运行良好。 我不知道为什么.....

更重要的是,如果我使用

CBrush *pBbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBbrush);
dc.Rectangle(CRect(m_ptOrign,point))

在vs2010中,它不再起作用,如绘图线情况

1 个答案:

答案 0 :(得分:2)

LineTo将使用当前被选入DC的笔。由于您没有选择笔,它将使用默认值。我不知道为什么VC6和VC2010会有所不同,也许它与两个版本之间MFC的差异有关。

一般来说,抓住DC并开始绘制它是一个坏主意。最好是在OnPaint或OnDraw方法中完成所有绘图。您可以调用InvalidateRect以将绘制消息发送到窗口。