这些天我一直在学习MFC。我想在VC ++ 6.0和VS2010中都使用MoveTo()和LineTo()函数绘制线条,但似乎在vs2010中不起作用。我只添加了两个Windows消息处理程序,单个文档项目中的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中,它不再起作用,就像画线的情况一样

最佳答案

LineTo将使用当前在DC中选择的笔。由于您尚未选择笔,因此它将使用默认值。我不知道为什么VC6和VC2010之间会有不同,也许这与两个版本之间MFC的不同有关。

通常,获取DC并开始使用DC是个坏主意。更好的方法是使用OnPaint或OnDraw方法完成所有绘图。您可以调用InvalidateRect来将绘制消息发送到窗口。

关于visual-c++ - 在MFC VS2010和VC++ 6.0中画线不会得到相同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9188064/

10-10 19:18