+ -
当前位置:首页 → 问答吧 → 点在一个区域内平滑移动问题

点在一个区域内平滑移动问题

时间:2011-12-07

来源:互联网

那位高手能提供一个关于一个点在一定区域内能自由移动的小例子啊?感激不尽啊!

作者: ganggangban   发布时间: 2011-12-07

例子没有
在给定范围内画点,边画边擦
要不了几行代码

作者: lgstudyvc   发布时间: 2011-12-07

例子没有,不过可以给个思路

1. 平滑移动,就是每两个点的位置只差一个点的大小,就是说两个点在x或y轴上的矢量差为1.
2. 画点
3. 重绘,重绘可以加在定时器里或者随便写一个sleep啥的,重绘的方式选对就ok了。

作者: zero_226   发布时间: 2011-12-07

引用 1 楼 lgstudyvc 的回复:
例子没有
在给定范围内画点,边画边擦
要不了几行代码

C/C++ code

void COutput1::OnMouseMove(UINT nFlags, CPoint point) //这个后期能优化应该优化一下
{
    // TODO: Add your message handler code here and/or call default
    CRect NewRect;//移动后得到的新矩形
    POINT OffSet;//计算移动的偏移量也就是看移动了多少
    CRgn Move_Region;
    Move_Region.CreateRectRgnIndirect(CRect(50,57,795,249));

            OffSet.x=point.x-MousePose.x;//计算出横抽的偏移量
            OffSet.y=point.y-MousePose.y;//计算出纵轴的偏移量

    if ((nFlags==MK_LBUTTON)&&(MouseDown_Flag==TRUE)&&Move_Region.PtInRegion(point))//限制移动的范围
    {    
            
            
                            NewRect.left=m_ellipsRect[Ellips_Flag].left+OffSet.x;
                NewRect.right=NewRect.left+14;
                NewRect.top=m_ellipsRect[Ellips_Flag].top+OffSet.y;
                NewRect.bottom=NewRect.top+14;
            

            m_ellipsRect[Ellips_Flag]=NewRect;                        //更新原来矩形
            MousePose=point;
            InvalidateRect(CRect(30,4,820,296));                        //刷新示波器显示部分
            Move_Region.DeleteObject();                                    //移除创建的区域
    }
    
    CDialog::OnMouseMove(nFlags, point);
}



其实这真没几行代码,上面是我写的,就是当点移动到那个矩形CRect(50,57,795,249));
边界的时候移动起来很不自由,磕磕板扳的 请高手指点一下 我该怎么改进啊。很感谢啊(我试了好多当到边界只能横向或纵向移动 老是有点问题),可能方法不对啊 谢谢了,高手指点一下 我不知该怎么整了。

作者: ganggangban   发布时间: 2011-12-07

热门下载

更多