Fork me on GitHub

vc++绘图基础

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
}

 效果图:

 

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绘制一个像素点

 

 

 

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);  //还原

 

 

 

 

 

 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();//

 

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();
}

 

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();
}

 

 

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();
}

 

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

posted @ 2018-09-21 11:36  &#127808;&#127808;&#127808;  阅读(982)  评论(0编辑  收藏  举报
🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀 🍀