功能描述:
点击菜单栏中的相关功能菜单,可以绘制点、直线、矩形、椭圆的功能。如下图:
项目实现:
项目是在 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);
}