这些天我一直在学习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/