画一条任意曲线实际上是由很短的直线段构成的,这需要从前一点向当前点即鼠标的现在位置画直线。所以需要定义两个变量来存放前一点的坐标。在鼠标移动时不断地画直线,这需要引进一个消息映射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