MFC 怎么动态的画线 画当前的线是清除上一次画的线 20

这个复不复杂?不复杂的话直接给代码吧... 这个复不复杂? 不复杂的话直接给代码吧 展开
 我来答
ljt20061908
2013-09-07 · TA获得超过1033个赞
知道小有建树答主
回答量:527
采纳率:87%
帮助的人:200万
展开全部

首先:建立一个单文档程序,名称为Demo
然后:在视图类的声明文件里面加入数据成员
class CDemoView : public CView
{
//········
protected:
    
    int m_Dragging;
    HCURSOR m_HCross;
    CPoint m_PointOld;
    CPoint m_PointOrigin;
//········
};
接着:在视图类的构造函数里面
CDemoView::CDemoView()
{
    // TODO: add construction code here
    m_Dragging=0;
    m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//载入标准的十字光标
}
接着:为视图类添加鼠标左键,鼠标移动,鼠标左键释放消息
void CDemoView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    ::SetCursor(m_HCross);//这一句能防止左键单击的时候,保持鼠标样式不变
    m_PointOrigin=point;
    m_PointOld=point;
    SetCapture();//捕获鼠标,充分控制鼠标
    m_Dragging=1;
    RECT Rect;
    GetClientRect(&Rect);//取得窗口当前显示坐标
    ClientToScreen(&Rect);//转换为屏幕坐标
    ::ClipCursor(&Rect);//限定光标在指定矩形了吗
    CView::OnLButtonDown(nFlags, point);
}
 
void CDemoView::OnMouseMove(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    ::SetCursor(m_HCross);
    if (m_Dragging)
    {
        CClientDC ClientDC(this);
        ClientDC.SetROP2(R2_NOT);//逆转当前屏幕颜色来画线的绘图方式
        ClientDC.MoveTo(m_PointOrigin);//
        ClientDC.LineTo(m_PointOld);   //擦去上一次的线
        ClientDC.MoveTo(m_PointOrigin);
        ClientDC.LineTo(point);//绘制这一次的临时线
        m_PointOld=point;
    }
    CView::OnMouseMove(nFlags, point);
}
 
void CDemoView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    if (m_Dragging)
    {
        m_Dragging=0;
        ::ReleaseCapture();//结束捕获鼠标
        ::ClipCursor(NULL);//解锁鼠标
        CClientDC ClientDC(this);
        ClientDC.SetROP2(R2_NOT);
        ClientDC.MoveTo(m_PointOrigin);
        ClientDC.LineTo(m_PointOld);//擦去上一次的临时线
        ClientDC.SetROP2(R2_COPYPEN);//缺省绘图模式,像素为画笔颜色
        ClientDC.MoveTo(m_PointOrigin);
        ClientDC.LineTo(point);//绘制固定线
    }
    CView::OnLButtonUp(nFlags, point);
}
liukui3420
2013-09-07 · TA获得超过349个赞
知道答主
回答量:77
采纳率:100%
帮助的人:80万
展开全部
划线不是很复杂,就两个函数MoveTO()和LineTo(),要动态的画线,主要是你得动态的把数据传给软件,然后再去掉画线的两个函数。注意要保存上一次划线的终点,这样才能连续的划下去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
糖糖寳寳
2015-09-11 · TA获得超过6.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:92%
帮助的人:3936万
展开全部
  所谓的动态画线,画矩形,画椭圆的本质就是在于消隐问题的解决以及对Windows消息循环机制的理解,消隐问题:
  因为MFC中有一个函数SetROP2,通过将该函数的参数设置为R2—NOT(当前绘制的像素值设为屏幕像素值的反色,“屏幕”二字是指你所绘制的图形所占据的那一部分屏幕区域,即直线所占的屏幕区域就是直线所在的那一段线的区域),利用这一点通过在同一区域重复画两次便可以将该区域的形状消隐。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Bblytheboy
2013-09-12
知道答主
回答量:15
采纳率:0%
帮助的人:15.7万
展开全部
将你的绘画视图,每次绘画完后,重绘一下就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式