MFC开发分类
1.基于对话框的程序
无菜单栏、无工具栏,界面较为简单
2.基于文档的程序
含菜单、工具栏、状态栏等
WIN32和MFC区别
1.一个是手写代码,一个是拖放控件
2.处理来自鼠标、键盘的消息时,一个用到窗口处理函数,
实现画线
1.新建项目
应用程序类型选择基于单个文档,使用MFC那一栏选择静态链接库,而不是动态,这样移植性高,最后一步,生成的类,类名最好用英文,生成的类有四种形态,App相当于main函数,mainframe下有DOC和view,view是显示,DOC是文档,view就是显示DOC的内容
2.生成单文档文件
3.打开类视图,视图==>类视图,里面有toolbar(工具栏),
知识扩展*:MVC:model view control
3.画线原理
记录两个事件:左键按下和左键抬起,以按下为起点、松开为终点,同时记录这两个事件的坐标
4.我们右键 MFCpaintview,点开属性,在属性里选择消息,选择left buttondown和left buttonup添加到源码中,并在添加类中加入代码
void CMFCpaintView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_start = point;
CView::OnLButtonDown(nFlags, point);
}
void CMFCpaintView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_stop = point;
CView::OnLButtonUp(nFlags, point);
}
4.在3步骤之前,要先在MFCpaintview.h中添加代码
CPoint m_start; /起始点 用于绘制线条
CPoint m_stop; /终止点 用于绘制线条
CPoint m_cur; /当前点,用于绘制线条
BOOL m_status; /状态
特别注意:在程序中后获得的坐标和我们屏幕的坐标是不一样的,屏幕坐标是以左上角为原点,程序坐标是以程序左上角为原点
5.上下文:描述一个程序运行时,所有参数的称为上下文,比如画一条线,画笔颜色,背景颜色,画笔粗细、主框架大小、状态(最大化还是最小化)等等这些参数,设备上下文:即显示器设备的参数
tagPOINT:父类 CPoint:子类 CObject:父类,CDC:子类
MoveTo为CDC成员函数
在OnLButtonUp里加入代码
CDC* pdc = GetDC();
pdc->MoveTo(m_start); /移到起始位置
pdc->LineTo(m_stop); /画线
ReleaseDC(pdc); /释放
6.可以画线了,但画线的过程中看不到画线的过程,我们添加MOUSEMOVE消息,这个消息能接收鼠标移动的轨迹
if (m_status)
{
m_cur = point;
InvalidateRect(NULL);
}
InvalidateRect重绘函数,会自动刷新画布,运行后会自动触发OnDraw成员函数
在ONDraw加入如下代码
if (m_status)
{
pdc->MoveTo(m_start);
pdc->LineTo(m_cur);
}
else
{
pdc->MoveTo(m_start);
pdc->LineTo(m_stop);
}
如果鼠标按下了,绘制起点到当前点的线,这样就有了绘制的痕迹,一旦松开,就直接画线,else里面的语句是干啥的呢,当窗口最大化最小化也会触发OnDraw,这个时候,就会触发else,重新绘制线条,否则放大后,线条会消失