****Dlg.h头文件加入:

//为project加入画笔、点变量数组
public:
CPen m_pen[5];
CPoint m_point[5];
public:
void DrawLine(CDC *pDC);
void DrawPolyline(CDC *pDC);
void DrawPolygon(CDC *pDC);
void DrawRect(CDC *pDC);
void DrawRoundRect(CDC *pDC);
void DrawEllipse(CDC *pDC);
void DrawArc(CDC *pDC);
void DrawAngleArc(CDC *pDC);

****Dlg.cpp构造函数改动:

CLineTestDlg::CLineTestDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CLineTestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //初始化画笔、点变量数组
m_pen[0].CreatePen(PS_SOLID,1,RGB(255,0,0)); //红色实线。1像素宽---參数:样式、宽度、颜色
m_pen[1].CreatePen(PS_SOLID,6,RGB(0,255,0)); //绿色实线,6像素宽
m_pen[2].CreatePen(PS_DASH,1,RGB(255,0,0)); //红色虚线,必须为一个像素宽
m_pen[3].CreatePen(PS_DOT,1,RGB(0,0,255)); //蓝色点线。必须为一个像素宽
m_pen[4].CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0));//红色双点虚线,必须为一个像素宽 //绘制多边形的点数组
m_point[0].x=10;
m_point[0].y=100;
m_point[1].x=10;
m_point[1].y=120;
m_point[2].x=100;
m_point[2].y=105;
m_point[3].x=170;
m_point[3].y=120;
m_point[4].x=170;
m_point[4].y=100;
}

***Dlg.cpp       onpaint函数

void CLineTestDlg::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
CBrush brush(RGB(190,190,190));//画刷
dc.SelectObject(&brush);//将画刷选入DC
DrawLine(&dc);
DrawPolyline(&dc);
DrawPolygon(&dc);
DrawRect(&dc);
DrawRoundRect(&dc);
DrawEllipse(&dc);
DrawArc(&dc);
DrawAngleArc(&dc); if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
dc.DrawIcon(x, y, m_hIcon); }
else
{
CDialogEx::OnPaint();
}
}

定义画图函数:

//绘制直线函数
void CLineTestDlg::DrawLine(CDC *pDC)
{
CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始画笔
for(int i=0;i<5;i++)
{
pDC->SelectObject(&m_pen[i]); //将画笔选入DC
pDC->MoveTo(20,20+i*15); //设置DC当前点
pDC->LineTo(170,20+i*15); //绘制直线
}
pDC->SelectObject(oldPen); //回复DC原画笔
} //绘制折线
void CLineTestDlg::DrawPolyline(CDC *pDC)
{
CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始画笔
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
m_point[j].y+=35; //每次下移35个像素
}
pDC->SelectObject(&m_pen[i]);
pDC->Polyline(m_point,5);
}
pDC->SelectObject(oldPen);
} //绘制多边形
void CLineTestDlg::DrawPolygon(CDC *pDC)
{
for(int j=0;j<5;j++)
m_point[j].y+=75; //数组中的点下移75个像素
CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始画笔
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
m_point[j].y+=35; //每次绘制图形下移35个像素
}
pDC->SelectObject(&m_pen[i]);
pDC->Polygon(m_point,5); //绘制多边形
}
pDC->SelectObject(oldPen);
} //绘制矩形
void CLineTestDlg::DrawRect(CDC *pDC)
{
CRect rect(150,20,220,80);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);//每次画图右移80个像素
pDC->SelectObject(&m_pen[i]);
pDC->Rectangle(&rect);//绘制矩形
}
pDC->SelectObject(oldPen);
} //绘制圆角矩形
void CLineTestDlg::DrawRoundRect(CDC *pDC)
{
CRect rect(150,150,220,230);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);//每次画图右移80个像素
pDC->SelectObject(&m_pen[i]);
pDC->RoundRect(&rect,CPoint(15,15));
}
pDC->SelectObject(oldPen);
} //绘制椭圆
void CLineTestDlg::DrawEllipse(CDC *pDC)
{
CRect rect(150,260,220,310);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);
pDC->SelectObject(&m_pen[i]);
pDC->Ellipse(&rect);
}
pDC->SelectObject(oldPen);
} //绘制弧线
void CLineTestDlg::DrawArc(CDC *pDC)
{
CRect rect(150,400,220,460);
CPoint ptStart(170,440);
CPoint ptEnd(210,400);
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);
ptStart+=CPoint(80,0);
ptEnd+=CPoint(80,0);
pDC->SelectObject(&m_pen[i]);
pDC->Arc(&rect,ptStart,ptEnd);
}
pDC->SelectObject(oldPen);
} //绘制直线与弧线
void CLineTestDlg::DrawAngleArc(CDC *pDC)
{
CRect rect(150,500,220,560);
CPoint ptCenter(185,600);
CPoint ptStart(150,630);
int r=30;
float angleStart=0;
float angleEnd=180;
CPen *oldPen=pDC->SelectObject(&m_pen[0]);
for(int i=0;i<5;i++)
{
rect.OffsetRect(80,0);
ptStart+=CPoint(80,0);
pDC->MoveTo(ptStart);
pDC->SelectObject(&m_pen[i]);
pDC->AngleArc(ptCenter.x,ptCenter.y,r,angleStart,angleEnd);
}
pDC->SelectObject(oldPen);
}

执行效果:

MFC 直线 虚线 折线 圆 椭圆 矩形 弧形的更多相关文章

  1. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  2. iOS:quartz2D绘图(画一些简单的图形,如直线、三角形、圆、矩形、文字等)

    前一篇几乎已经详细介绍了Quartz2D的所有知识,这一篇以及后面就不废话了,主要是用具体的实例来演示绘图效果. 这里我们先来绘制一些简单的图形(如直线.三角形.圆.矩形.文字.图像),它有两种方式可 ...

  3. javascript画直线和画圆的方法(非HTML5的方法)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 判断圆和矩形是否相交C - Rectangle and Circle

    Description Given a rectangle and a circle in the coordinate system(two edges of the rectangle are p ...

  5. cocos2d-x JS 各类点、圆、矩形之间的简单碰撞检测

    这里总结了一下点.圆.矩形之间的简单碰撞检测算法 (ps:矩形不包括旋转状态) 点和圆的碰撞检测: 1.计算点和圆心的距离 2.判断点与圆心的距离是否小于圆的半 isCollision: functi ...

  6. HTML5画:线、圆、矩形、渐变

    示例一:矩形 <!DOCTYPE html><head> <meta charset=utf-8> <title>HTML5画线.圆.矩形</ti ...

  7. HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1221 Rectangle and Circle Time Limit: 2000/1000 MS (J ...

  8. TOJ 3974: Region n条直线m个圆最多将圆分为几个区域

    3974: Region  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 33     ...

  9. Cesium动态绘制实体(点、标注、面、线、圆、矩形)

    //自定义绘制图形,支持 点,线,面,矩形,圆,标识,可自定义绘制过程中的和绘制完的预览 this.drawGraphic = function(view,_mode,_callback,_Graph ...

随机推荐

  1. 带符号的char类型取值范围为什么是-128——127

    以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的? 127好理解,char类型是8位,最高位是符号位,0正1负,所以011111 ...

  2. 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用

    在上一篇文章中,我们提到了图片必须是2的n次方的问题.但是随着Libgdx的不断完善和发展,使用一些工具就 可以很好的解决了这样一个问题,但是它的功能又不仅仅只限于此,那么下面就来让我们看看Textu ...

  3. C++ 函数声明中指定,默认参数

    C++ 在声明函数的时候,如果指定了,参数的默认值,再调用函数的时候可以省略后面的参数. 如果调用函数写上的参数,但是不全.参数列表后面的使用默认值.如下例子,一看就清楚了. #include < ...

  4. android 应用静默自启动的解决方法

    一个apk完全的自动静默启动目前不能实现,所以就用到了Activity的一个方法activity.moveTaskToBack(boolean),这个方法就是可以退出应用到后台而不是finish()退 ...

  5. 简易视频播放器2 (基于Qt、opencv)

    因项目需要,需要实现一个对以保存的监测视频快速查看功能. 查询网上一些资料,初步简易的实现了一下. 实际效果图: 该程序基于Qt5.4,opencv248,开发环境为win8.1 结构为: video ...

  6. windows phone7开发环境配置错误

    遇到下面这样一个问题:在配置windows phoe7开发环境的时候出现如下错误,以及相应的解决方案,希望对大家有所帮助. 装完环境后出现下面错误: [caption id="attachm ...

  7. asp.net用Zxing库实现条形码输出

    原文 asp.net用Zxing库实现条形码输出 这个简单的问题,困扰了我将近两个小时,主要是再官方文档上没有找到demo,那只能用搜索引擎了,看看其他程序员写的程序,但是发现处处是坑,看了四五个例子 ...

  8. java.lang.NoClassDefFoundError: org/apache/lucene/analysis/synonym/SynonymFilter

    2013-6-24 13:28:51 org.apache.solr.common.SolrException log 严重: java.lang.NoClassDefFoundError: org/ ...

  9. YT工作日志-0911

    上午 在导师的帮助下,帮我从svn上下载了项目.但是因为项目太大(不算jar包有730M),很多模块不是我工作中涉及的,但是运行的时候会报错,所以导师还帮我找了很多错误.把那些不需要的东西注释了.就这 ...

  10. mysql 初识之日志文件篇

    日志文件 1. err日志     error log 记录mysql在运行的过程中所有较为严重的警告和错误信息,以及mysql server每次启动和关闭的详细信息.系统在默认情况下关闭error ...