之前没接触过C++的MFC,最近几天需要给产品做一些产品测试程序的改写,增加一些功能,我只有从零开始学习MFC了,一开始打开测试程序源代码就蒙的,无从下手;慢慢查资料看博客,在一点没接触过的情况下API开始弄,真的感谢那些爱分享的人,这也让我萌生了写点笔记的想法,因为是新手,下面有不对的希望大家指正。
一、画线相关笔记
我是参照了这位的资料开始写的画线程序:http://blog.sina.com.cn/s/blog_5fa918660101axut.html
1.在我创建了基于对话框的项目后为主对话框添加了WM_MOUSEMOVE消息,然后在资源视图那里单击主对话框添加类型为CPoint的变量m_StartPoint,访问属性为protected,之后就可以进入WM_MOUSEMOVE消息响应函数里面写代码了:
代码如下:
void ConetestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC aDC(this);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
m_StartPoint=point;//将画线的起点移动到画线后的点
CDialog::OnMouseMove(nFlags, point);
}
以上代码是跟随鼠标光标画线的程序,即鼠标移动到哪线就画到哪,不会断开
其中CClientDC可以让开发者访问目标窗口中客户区;CClientDC aDC(this); 相当于定义了一个窗口类的指针aDC.
MoveTo()只标明起始点不画线,LineTo()是目标点,在查资料的时候有的说LineTo()函数会把起始点移动到当前点位置,可是如果把上面代码中的m_StartPoint=point;去掉就不行,去掉的结果就是每一天线都是从最左上角画一条直线到光标位置;如果该代码中不用定义的变量,指针来画线而用坐标来画线的话LineTo()却可以把上一点位置移动到当前点的功能,如下代码实现的是一条连续折线:
当你需要实现通过按下鼠标才能画线的功能的话可以设置条件:
void CswdfView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler Code here and/or Call default
if(nFlags==MK_LBUTTON) //判断鼠标左键是否按下,如果按下,则移动时画线
{
CClientDC aDC(this);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
m_StartPoint=point; //将画线的起点移动到鼠标移动后的点
}
CView::OnMouseMove(nFlags, point);
}
不过缺点是字与字之间会连线
如果要实现不连线的话在可以按照上面那个博客的方法吧鼠标按下,抬起,移动三个消息响应函数度实现就可以实现鼠标画线写字操作了。