来自MFC新手的一点笔记

之前没接触过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()却可以把上一点位置移动到当前点的功能,如下代码实现的是一条连续折线:

扫描二维码关注公众号,回复: 2149383 查看本文章


当你需要实现通过按下鼠标才能画线的功能的话可以设置条件:

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);

}

不过缺点是字与字之间会连线

如果要实现不连线的话在可以按照上面那个博客的方法吧鼠标按下,抬起,移动三个消息响应函数度实现就可以实现鼠标画线写字操作了。

猜你喜欢

转载自blog.csdn.net/wqq995/article/details/80942533
今日推荐