mfc学习
最近有些烦躁,技术让我在家等人事电话,这都快一周了....
依托mfc框架创建自己的应用程序
Frm窗口框架类,Application应用程序类,Doc文档类,View视图类.
Frm跟view的关系就好比,墙跟墙纸的关系.我们要绘图,书写工作就得在View类上进行.
vs中类视图为我们提供了很大的方便,可以方便的添加消息
今天学习了,通过鼠标按下,画线
主要代码在视图类中完成,通过类视图,添加OnLButtonDown,OnLButtonUp,OnMouseMove三个消息
在View类中添加,两个成员变量,CPoint oldpt,Bool isPress
oldpt用来记录鼠标按下时的位置, isPress作为标志,记录鼠标是否抬起
mfc提供CClientDC类来实现绘图:
绘制线条的起始点:MoveTo(CPoint p) p – 起始点坐标
绘制一条到指定点的线:LineTo(CPoint p) p – 终点坐标
CClientDC::CClientDCCClientDC( CWnd* pWnd );
throw( CResourceException );
参数:
pWnd | 设备上下文将要存取的客户区所在的窗口。 |
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//画直线
//CClientDC 构造函数需要传一个窗口类,在View类中实现,这里直接穿this指针
//dc.MoveTo(m_oldpt);
//dc.LineTo(point);
this->m_isPress = FALSE;
CView::OnLButtonUp(nFlags, point);
}
void CMFCApplication1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//创建画笔
CPen pen(PS_DOT, 2, RGB(255, 0, 255));
// 划线函数 判定状态
CClientDC dc(this);
//选择画笔
CPen *old = dc.SelectObject(&pen);
if (m_isPress) //鼠标移动事件中,该消息一直在消息队列中,使用if判断
{
dc.MoveTo(m_oldpt);
dc.LineTo(point);
//更新坐标点
m_oldpt = point;
}
//还原画笔
dc.SelectObject(old);
dc.Ellipse(100,100,200,300);
CView::OnMouseMove(nFlags, point);
}