void CHHHView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
if(m_bDraw==true)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
if(m_ptOrigin.x!=point.x||m_ptOrigin.y!=point.y)//坐标重复不累计
          iy++;
m_ptOrigin=point;

}
CView::OnMouseMove(nFlags, point);
}
但是这样还是有问题,周长的大小iy和鼠标移动的快慢有关系,大侠能帮我解决吗

解决方案 »

  1.   

    OnMouseMove
    这个是你鼠标只要一动就会触发的,你再看下你的函数,计算的是一小段一小段的长度,就是两个检测鼠标移动间隔之间鼠标移动的距离,鼠标移动快的时候,检测时间之内就能移动距离更多,鼠标移动慢的话,那一小段距离就小.
      

  2.   

    这样好些不对的,在OnLButtonDown里面,m_ptOrigin=point;算上圆心!而OnMouseMove 里面不改变圆心!只记录半径!半径的算法是point到m_ptOrigin的距离:
    iy = sqrt((m_ptOrigin.x-point.x)*(m_ptOrigin.x-point.x)+(m_ptOrigin.y-point.y)*(m_ptOrigin.y-point.y))
      

  3.   

    得到长度后,那么周长c= 2*3.1415926*iy
      

  4.   

    lz可以用OnLButtonDown()记录起始点,在OnMouseMove()中实际上记录的是画线的中间点,等到
    响应OnLButtonUp()函数(保存当前点)画出图形。这样通过起始点和当前点再加上公式就可以计算周长了
      

  5.   

    如果仅仅是计算曲线的长度,只要这样:
    iy = sqrt((m_ptOrigin.x-point.x)*(m_ptOrigin.x-point.x)+(m_ptOrigin.y-point.y)*(m_ptOrigin.y-point.y))
      

  6.   

    iy += sqrt((m_ptOrigin.x-point.x)*(m_ptOrigin.x-point.x)+(m_ptOrigin.y-point.y)*(m_ptOrigin.y-point.y))m_ptOrigin=point;