时间: 2020-11-25|70次围观|0 条评论

vc++绘图基础

参考https://wenku.baidu.com/view/50c1214ee009581b6ad9eb2e.html

注:如果代码实现出错,请手敲一遍再执行

在OnDraw里面添加语句

例:

void CMy123View::OnDraw(CDC* pDC) { CMy123Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //在此加语句 CPen MyPen,*OldPen; MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); OldPen=pDC->SelectObject(&MyPen); pDC->MoveTo(20,30); pDC->LineTo(200,300); pDC->SelectObject(OldPen); // TODO: add draw code for native data here } 

 效果图:

vc++绘图基础插图

 

1.画点 

 

在屏幕的(20,20)坐标位置处绘制一个红色像素点。然后取出该像素点的颜色,在屏幕的(60,20)坐标处绘制一个相同颜色的像素点。
   

  

    COLORREF c;    //变量c用于存放像素点的颜色值
    pDC->SetPixel(20,20,RGB(255,0,0));    //在屏幕的(20,20)坐标位置处,绘制一个红色的像素点
    c=pDC->GetPixel(20,20);        //c保存该像素点的颜色
    pDC->SetPixel(60,20,c);        //在像素点(60,20)处以颜色值c绘制一个像素点

 

 

vc++绘图基础插图1

 

2.画线

 

从屏幕的(20,30)到(200,300)画一条一像素宽的蓝色直线

   

    CPen MyPen,*OldPen;   MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); OldPen=pDC->SelectObject(&MyPen); pDC->MoveTo(20,30);  //移动画笔到(20,30)
    pDC->LineTo(200,300);  //从(20,30)画线到(200,300)
    pDC->SelectObject(OldPen);  //还原

 

 

 vc++绘图基础插图2

 

 

 3.画矩形

 

绘制左上角点为(100,100),右下角点为(600,300)的矩形。矩形边框为一像素宽的蓝色边界线,内部填充红色

    CPen MyPen,*OldPen;//     MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255));//     OldPen=pDC->SelectObject(&MyPen);//     CBrush MyBrush,*OldBrush;//     MyBrush.CreateSolidBrush(RGB(255,0,0));//     OldBrush=pDC->SelectObject(&MyBrush);//     pDC->Rectangle(100,100,600,300);//画矩形
    pDC->SelectObject(OldPen);//
    //MyPen.DelectObject();//     pDC->SelectObject(OldBrush);//
    //MyBrush.DelectObject();//

vc++绘图基础插图3

 

4.绘制椭圆函数

 

将一个圆绘制在视区中央,圆的形状依据视区形状而定。当窗口的形状发生改变是,圆的形状也随之改变。坐标系的中点位于屏幕中心。X轴向右,Y轴向上。圆的边界为一像素宽的蓝色边界线,内部填充为红色。

void CZhy123View::OnDraw(CDC* pDC) { CZhy123Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here
    CRect Rect;//定义矩形对象
    GetClientRect(&Rect);//获得当前窗口的客户区大小
    pDC->SetMapMode(MM_ANISOTROPIC);//设置MM_ANISOTROPIC的映射模式
    pDC->SetWindowExt(Rect.Width(),-Rect.Height());//设置窗口范围大小
    pDC->SetViewportExt(Rect.right,-Rect.bottom);//设置视区范围
    pDC->SetViewportOrg(Rect.right/2,Rect.bottom/2);//设置视口原点
    CPen MyPen,*OldPen; MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); OldPen=pDC->SelectObject(&MyPen); CBrush MyBrush,*OldBrush; MyBrush.CreateSolidBrush(RGB(255,0,0)); OldBrush=pDC->SelectObject(&MyBrush); pDC->Ellipse(-Rect.right/2,-Rect.bottom/2,Rect.right/2,Rect.bottom/2); //Ellipse函数中,参数x1,y1是限定椭圆范围的外接矩形左上角点的坐标;参数x2,y2是限定椭圆范围的外接矩形右下角点的坐标
    pDC->SelectObject(OldPen); MyPen.DeleteObject(); pDC->SelectObject(OldBrush); MyBrush.DeleteObject(); }

vc++绘图基础插图4

 

5.椭圆弧

 

绘制第一象限内的椭圆弧

void CZhy123View::OnDraw(CDC* pDC) { CZhy123Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here
    CPen MyPen,*OldPen; MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); OldPen=pDC->SelectObject(&MyPen); pDC->Arc(100,100,600,300,100,00,350,600); pDC->SelectObject(OldPen); MyPen.DeleteObject(); }

 

vc++绘图基础插图5

 

6.绘制多边形

 

绘制两个多边形,一个使用路径填充,另一个不使用路径填充,试观察结果的异同

 

void CZhy123View::OnDraw(CDC* pDC) { CZhy123Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here //绘制第一个多边形,用路径填充图
    CPoint p[7];//定义顶点数组
    p[0]=CPoint(340,240); p[1]=CPoint(260,160); p[2]=CPoint(220,260); p[3]=CPoint(260,370); p[4]=CPoint(320,300); p[5]=CPoint(360,380); p[6]=CPoint(440,220); CBrush MyBrush; MyBrush.CreateSolidBrush(RGB(255,0,0)); CBrush *OldBrush=pDC->SelectObject(&MyBrush); pDC->BeginPath(); //打开路径
    pDC->MoveTo(p[0]);//绘制多边形
    for(int i=1;i<7;i++) pDC->LineTo(p[i]); pDC->LineTo(p[0]); pDC->EndPath(); //关闭路径图
    pDC->FillPath(); //填充路径图
    pDC->SelectObject(OldBrush); MyBrush.DeleteObject(); //绘制第二个多边形,用画刷填充
    p[0]=CPoint(740,240); p[1]=CPoint(660,160); p[2]=CPoint(620,260); p[3]=CPoint(660,370); p[4]=CPoint(720,300); p[5]=CPoint(760,380); p[6]=CPoint(840,220); MyBrush.CreateSolidBrush(RGB(255,0,0)); CBrush*Oldbrush=pDC->SelectObject(&MyBrush); pDC->Polygon(p,7); pDC->SelectObject(OldBrush); MyBrush.DeleteObject(); }

vc++绘图基础插图6

 

(1,2两个是上课打的~)今天就学到这啦~ 

转载于:https://www.cnblogs.com/zhying99/p/9685743.html

原文链接:https://blog.csdn.net/weixin_30342827/article/details/97105145

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《vc++绘图基础
   

还没有人抢沙发呢~