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两个是上课打的~)今天就学到这啦~
转载于:https://www.cnblogs.com/zhying99/p/9685743.html
原文链接:https://blog.csdn.net/weixin_30342827/article/details/97105145
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~