MFC介绍

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,重新绘制线条,否则放大后,线条会消失

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值