posts - 36,  comments - 28,  trackbacks - 0

画一条任意曲线实际上是由很短的直线段构成的,这需要从前一点向当前点即鼠标的现在位置画直线。所以需要定义两个变量来存放前一点的坐标。在鼠标移动时不断地画直线,这需要引进一个消息映射WM_MOUSEMOVE。另外,在面版上画图需要定义一个屏幕设备对象CClientDC dc(this)。

1 在头文件DrawDlg.h中定义变量:
    int m_PrevX, m_PrevY;

2 在对话框CDrawDlg中消息映射WM_MOUSEMOVE。在类向导中选中对话框DrawDlg,再在消息列表框中寻找WM_MOUSEMOVE,选中后点击Add Function,就生成函数OnMouseMove(),点Add code立即输入代码。

3 函数OnMouseMove()的代码

void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    if(nFlags & MK_LBUTTON == MK_LBUTTON)
    {
//定义屏幕设备对象

        CClientDC dc(this);
        dc.MoveTo(m_PrevX, m_PrevY);
        dc.LineTo(point.x, point.y);
        m_PrevX = point.x;
        m_PrevY = point.y;
    }
    CDialog::OnMouseMove(nFlags, point);
}
MoveTo()定位画笔到前一点,画完直线后把点point储存到m_Prev中。

4 给“鼠标按下”写代码
添加消息映射WM_MOUSEDOWN,函数OnLButtonDown的功能是保存鼠标点击的当前点,代码为:
    m_PrevX = point.x;
    m_PrevY = point.y;

5 给清除按钮写代码
    Invalidate();
该函数的功能是调用Panit函数重画对话框。

编译和运行。

—END—

posted on 2009-06-25 15:56 Hali 阅读(1410) 评论(0)  编辑 收藏 引用 所属分类: vs2005
只有注册用户登录后才能发表评论。

<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿

随笔分类

随笔档案

休闲链接

学习链接

牛人博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜