计算机图形学实用技术(画图作品)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实
验
报
告
课程名称:《计算机图形学实用技术》班别:XXX
授课老师:XXX
学号:XXX
姓名:XXX
完成时间:2010年11月15日
一、实验名称:直线、矩形、圆、椭圆绘图操作的实现
二、实现功能:通过指针来绘出直线,矩形、圆、椭圆的形状大小及对其填充颜色
三、代码的实现:
1、在消息处理函数中的主要代码:
void CDarwView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_prigin=m_ptOld=point; m_bDraw=TRUE;
m_Drag=1;
CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&point);
m_prigin=point;
dc.SelectStockObject(NULL_BRUSH);
SetCursor(m_HCursor);
CScrollView::OnLButtonDown(nFlags, point);
}
void CDarwView::OnOptionsColor()
{
// TODO: Add your command handler code here
CColorDialog ColorDialog;
if(ColorDialog.DoModal()==IDOK)
m_pColor=ColorDialog.GetColor();
m_FFlag=0;
}
void CDarwView::OnOptionsFillcolor()
{
// TODO: Add your command handler code here
CColorDialog ColorDialog;
if(ColorDialog.DoModal()==IDOK)
m_fColor=ColorDialog.GetColor();
m_FFlag=1;
}
2、实现各个图形主要代码:
1)、画直线
void CDarwView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_Drag=0;
if(CurrentDraw==DRAW_VCLINE)
{
CDC *pDC=GetDC();
CPen mypen,*oldpen;
mypen.CreatePen(PS_SOLID,1,m_pColor);
oldpen=pDC->SelectObject(&mypen);
pDC->MoveTo(m_prigin);
pDC->LineTo(point);
ReleaseDC(pDC);
mypen.DeleteObject();
}
m_bDraw=FALSE;
CView::OnLButtonUp(nFlags, point);
}
2)、画矩形、圆、椭圆
void CDarwView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&point);
dc.SelectStockObject(NULL_BRUSH);
SetCursor(m_HCursor);
if(m_Drag)
{
CDarwDoc *pDoc=GetDocument();
CPen NewPen,*pOldPen;
NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor);
pOldPen=dc.SelectObject(&NewPen);
CBrush NewBrush,*pOldBrush;
if(m_FFlag)
{
if(m_HFlag==0)
NewBrush.CreateSolidBrush(RGB(255,255,255));
else
NewBrush.CreateSolidBrush(m_fColor);
pOldBrush=dc.SelectObject(&NewBrush);
}
dc.SetROP2(10);
if(CurrentDraw==DRAW_RECTANGLE)
{
dc.Rectangle(m_prigin.x,m_prigin.y,m_ptOld.x,m_ptOld.y);
dc.Rectangle(m_prigin.x,m_prigin.y,point.x,point.y);
}
if(CurrentDraw==DRAW_VCCIRCLE)
{