首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

画直线的有关问题

2012-02-11 
画直线的问题我在wm_onlbuttondown、wm_mousemove和wm_lbuttonup消息映射中实现了画一条直线的功能,后来在

画直线的问题
我在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 一类的做法.

处理要使用双缓存.

热点排行