读书人

画直线的有关问题

发布时间: 2012-02-11 09:51:34 作者: rapoo

画直线的问题
我在wm_onlbuttondown、wm_mousemove和wm_lbuttonup消息映射中实现了画一条直线的功能,后来在加入了一个鼠标坐标的实时显示功能,然后运行,发现画一条直线后移动一下鼠标,直线就消失不显示了,应该是鼠标实时显示调用ondraw虚函数的缘故,但不知道怎么解决。。忘各位指点一二。以下为我的代码:
void CMy111View::OnDraw(CDC* pDC)
{
CMy111Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC-> TextOut(m_start.x,m_start.y,pDoc-> m_StartCoordinate);
pDC-> TextOut(m_end.x,m_end.y,pDoc-> m_EndCoordinate);
}

void CMy111View::OnLButtonDown(UINT nFlags, CPoint point)
{
CMy111Doc *pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc-> m_StartCoordinate.Format( "起点坐标:%d,%d ",point.x,point.y);
m_start.x=point.x+20;
m_start.y=point.y;
// TODO: Add your message handler code here and/or call default
if(m_bIsDraw)
return;
m_cpStart=point;
m_cpEnd=point;
m_bIsDraw=TRUE;

CView::OnLButtonDown(nFlags, point);
}

void CMy111View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMy111Doc *pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc-> m_EndCoordinate.Format( "终点坐标:%d,%d ",point.x,point.y);
m_end.x=point.x+20;
m_end.y=point.y;
Invalidate();
if(m_bIsDraw)
m_bIsDraw=FALSE;
CView::OnLButtonUp(nFlags, point);
}

void CMy111View::OnMouseMove(UINT nFlags, CPoint point)
{

// TODO: Add your message handler code here and/or call default
if(!m_bIsDraw)
return;
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.MoveTo(m_cpStart);
dc.LineTo(m_cpEnd);
dc.MoveTo(m_cpStart);
dc.LineTo(point);
m_cpEnd=point;
CView::OnMouseMove(nFlags, point);
}


[解决办法]
把要画的东西交给OnDraw,不要放在OnMouseMove里面
[解决办法]
OnMouseMove 应该是改变flag 一类的做法.

处理要使用双缓存.

读书人网 >VC/MFC

热点推荐