实 验 目 的 及 要 求 目的: 通过对Visual C++的学习,掌握Visual C++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。 要求: 1.学习Visual C++图形程序设计的方法; 2.掌握Visual C++集成编程环境的使用、图形设备接口和常用图形程序设计、鼠标编程、橡皮筋交互技术、画笔以及菜单设计等; 3.利用CDC类已有的画笔画线等函数绘制一张笑脸,要求有眼睛鼻子和嘴巴,笑脸处于屏幕的中央,并加入文字,请在合适的位置,添加姓名和学号(分别用蓝色和红色表示)。
实 验 环 境
Visual C++ 6.0MFC
实 验 内 容
1.学习Visual C++图形程序设计的方法;
2.掌握Visual C++集成编程环境的使用、图形设备接口和常用图形程序设计、鼠标编程、橡皮筋交互技术、画笔以及菜单设计等; 3.利用CDC类已有的画笔画线等函数绘制一张笑脸,要求有眼睛鼻子和嘴巴,笑脸处于屏幕的中央,并加入文字,请在合适的位置,添加姓名和学号(分别用蓝色和红色表示)。
算 法 描 述 及 实 验 步 骤
将画圆、画线、画弧线封装成参数可调的函数,然后在onDraw中调用相应函数进行绘图。设置调整参数依次画出脸型、眼睛、鼻子、嘴巴,最后加入实验要求的文字。
调 试 过 程 及 实 验 结 果
总
结 可以让我进一步对图形学设计有具体的应用。学了很多新的东西。CDC画图是个有意思的东西。
附 录 void CWork1View::OnDraw(CDC* pDC) { CWork1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here DrawEllipse(300, 300, 200,PS_SOLID,3,RGB(0,0,0),RGB(255,255,255)); DrawEllipse(200, 240, 20,PS_SOLID,1,RGB(0,0,0),RGB(255,255,255)); DrawEllipse(200, 240, 10,PS_SOLID,1,RGB(0,0,0),RGB(0,0,0)); DrawEllipse(400, 240, 20,PS_SOLID,1,RGB(0,0,0),RGB(255,255,255)); DrawEllipse(400, 240, 10,PS_SOLID,1,RGB(0,0,0),RGB(0,0,0)); DrawLine(300, 230, 300, 350, PS_SOLID, 20, RGB(0,0,0)); //宽度小于1才可以改变样式 DrawArc(160,350,440,400,110,350,470,350,PS_SOLID,5,RGB(255,0,0)); DrawText(pDC,50,600,50,100, RGB(255,0,0), “开心”); DrawText(pDC,560,270,25,0, RGB(0,0,255), “风靡心落”); DrawText(pDC,540,300,25,0, RGB(255,0,0), “20188452”); }
void CWork1View::DrawLine(int x0,int y0,int x1,int y1,int style,int width,COLORREF color) { CClientDC dc(this); CPen NewPen,*pOldPen; NewPen.CreatePen(style,width,color); pOldPen=dc.SelectObject(&NewPen); dc.MoveTo(x0,y0); dc.LineTo(x1,y1); dc.SelectObject(pOldPen); NewPen.DeleteObject(); }
void CWork1View::DrawArc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int style, int width, COLORREF color) { CClientDC dc(this); CPen NewPen,*pOldPen; NewPen.CreatePen(style,width,color); pOldPen=dc.SelectObject(&NewPen); dc.Arc(x1, y1, x2, y2, x3, y3, x4, y4); dc.SelectObject(pOldPen); NewPen.DeleteObject(); }
void CWork1View::DrawEllipse(int x, int y, int r, int style, int width, COLORREF color, COLORREF bcolor) { CClientDC dc(this); CPen NewPen,*pOldPen; NewPen.CreatePen(style,width,color); pOldPen=dc.SelectObject(&NewPen); CBrush brush,*oldbrush; brush.CreateSolidBrush(bcolor); oldbrush=dc.SelectObject(&brush); dc.Ellipse(x-r,y-r,x+r,y+r); dc.SelectObject(pOldPen); dc.SelectObject(oldbrush); NewPen.DeleteObject(); brush.DeleteObject(); }
void CWork1View::DrawText(CDC *pDC, int x, int y, int size, int angle, COLORREF color, LPCTSTR str) { pDC->SetTextColor(color); //CString str=“测试test”; CFont NewFont,*pOldFont; LOGFONT lf; memset(&lf,0,sizeof(LOGFONT)); //将lf所有成员置零 lf.lfHeight=size; lf.lfCharSet=GB2312_CHARSET; lf.lfEscapement=angle; strcpy((lf.lfFaceName),“宋体”); NewFont.CreateFontIndirect(&lf); pOldFont=pDC->SelectObject(&NewFont); pDC->TextOut(x,y,str); pDC->SelectObject(pOldFont); NewFont.DeleteObject(); } 完整版已分享。
|