我这些天一直在学习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中,它不再起作用,如绘图线情况
答案 0 :(得分:2)
LineTo
将使用当前被选入DC的笔。由于您没有选择笔,它将使用默认值。我不知道为什么VC6和VC2010会有所不同,也许它与两个版本之间MFC的差异有关。
一般来说,抓住DC并开始绘制它是一个坏主意。最好是在OnPaint或OnDraw方法中完成所有绘图。您可以调用InvalidateRect以将绘制消息发送到窗口。