MFC 绘制点、直线、矩形、椭圆的功能

功能描述:
点击菜单栏中的相关功能菜单,可以绘制点、直线、矩形、椭圆的功能。如下图:

项目实现:
项目是在 VS2015 上创建的单文档视图结构。
代码如下:

// MfcDrawDemoView.cpp : CMfcDrawDemoView 类的实现

// CMfcDrawDemoView 消息处理程序

// 绘制点
void CMfcDrawDemoView::OnDrawPoint()
{
	// 绘制点的代码
	CClientDC dc(this);
    // SetPixel() 三个参数分别为点的X坐标,Y坐标,和点的颜色
	dc.SetPixel(50, 50, RGB(255, 0, 0));   
}

// 绘制直线
void CMfcDrawDemoView::OnDrawLine()
{
	// 构造一个DC,传入当前对象.表示在当前对象使用
	CClientDC dc(this);
	// 创建一个画笔.(线的类型, 宽度, 颜色);
	CPen pen(PS_SOLID, 1, RGB(255, 0, 255));
	// 把画笔选到设置描述表当中.覆盖默认画笔
	dc.SelectObject(&pen);
	// 画直线.
	dc.MoveTo(100, 50);
	dc.LineTo(200, 200);
	// MoveTo() 函数传入的是直线起点的坐标
	// LineTo() 函数传入的参数是直线终点的坐标  
}

// 绘制矩形
void CMfcDrawDemoView::OnDrawRect()
{
	// 构造一个DC,传入当前对象,表示当前对象使用
	CClientDC dc(this);
	// 创建一个画笔,(线的类型,宽度,颜色)
	CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
	// 把画笔选到设置描述表当中,覆盖默认画笔
	dc.SelectObject(&pen);
	// 创建一个透明的画刷,来填充矩形的内部
	CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
	// 把画刷加入设置描述表
	dc.SelectObject(pBrush);

	// 画矩形,传入一个矩形的对象,分别为左上,右下的边界范围
	dc.Rectangle(CRect(200, 200, 300, 300));
}

// 绘制椭圆
void CMfcDrawDemoView::OnDrawEllipse()
{
	// 构造一个DC,传入当前对象,表示当前对象使用
	CClientDC dc(this);
	// 创建一个画笔,(线的类型,宽度,颜色)
	CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
	// 把画笔选到设置描述表当中,覆盖默认画笔
	dc.SelectObject(&pen);
	// 创建一个透明的画刷,来填充矩形的内部
	CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
	// 把画刷加入设置描述表
	dc.SelectObject(pBrush);

	// 矩形的内接圆,输入矩形左上角和右下角的坐标
	dc.Ellipse(300, 300, 350, 400);
}

// 响应鼠标在视图中的【按下】事件
void CMfcDrawDemoView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	//
    // m_StartPoint 在 MfcDrawDemoView.h 中定义为:CPoint m_StartPoint;
    // 鼠标第一按下时,获取当前鼠标的位置,赋值给【m_StartPoint】
	m_StartPoint = point;   

	CView::OnLButtonDown(nFlags, point);
}

// 响应鼠标在视图中的【弹起】事件
void CMfcDrawDemoView::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	//
    // m_EndPoint 在 MfcDrawDemoView.h 中定义为:CPoint m_EndPoint;
    // 鼠标弹起时,将鼠标的位置赋值给【m_EndPoint】,然后执行绘图函数
	m_EndPoint = point;

	// 构造一个DC,传入当前对象,表示当前对象使用
	CClientDC dc(this);
	// 创建一个画笔,(线的类型,宽度,颜色)
	CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
	// 把画笔选到设置描述表当中,覆盖默认画笔
	dc.SelectObject(&pen);

	// 画直线
	dc.MoveTo(m_StartPoint);
	dc.LineTo(m_EndPoint);

	CView::OnLButtonUp(nFlags, point);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值