好文档 - 专业文书写作范文服务资料分享网站

C++实验报告(MFC简单画图程序)

天下 分享 时间: 加入收藏 我要投稿 点赞

. 3.改变线型

在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w, m_nColor),线型处用penstyle表示,则改变penstyle的值即改变了画笔的类型。选择菜单绘图→线型选择线型,此时所选的线型就赋给线型变量penstyle。若不选择线型值,则penstyle=ID_SOLID(即默认线型为实线)。

4.改变线色

在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w, m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。若不选择颜色,则默认(线)颜色为黑色。

4.改变填充色

在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。若不选择颜色,则默认填充色为黑色。

5.绘制图形

鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;鼠标左键弹起时,此时绘图结束,鼠标弹起时所在位置就是画图的最终终点位置,画图结束后,刷新窗口,以便重新画图,此时执行的是OnLButtonUp()函数。 四、 结果及源代码 4.1 运行结果

1.点击链接,编译,运行后的窗口如图7所示。

6 / 12

.

图7 运行结果

4.2 程序代码

1.在视图类构造函数中对各定义变量初始化 CDrawView::CDrawView() { w=1;//初始状态时线宽 shape=1;//初始状态时形状 m_nColor=RGB(0,0,0);//初始状态时线色 m_fColor=RGB(0,0,0);//初始状态时填充色 penstyle=PS_SOLID;//初始化线型为实线 }

2.形状函数

void CDrawView::OnLine() { shape=1;

7 / 12

. }

void CDrawView::OnRect() { shape=2; }

void CDrawView::OnEllipse() { shape=3; }

3.线宽改变函数

void CDrawView::OnW1() { w=1; }

void CDrawView::OnW2() { w=2; }

void CDrawView::OnW3() { w=3; }

void CDrawView::OnW4() { w=4; }

void CDrawView::OnW5() { w=5; }

void CDrawView::OnW6() { w=6; }

4.线型选择函数

void CDrawView::OnSolid() { penstyle=PS_SOLID; }

void CDrawView::OnDash() { penstyle=PS_DASH; }

void CDrawView::OnDot()

8 / 12

. { penstyle=PS_DOT; }

void CDrawView::OnDashdot() { penstyle=PS_DASHDOT; }

5.颜色选择函数

void CDrawView::OnColor() { CColorDialog Color;//创建颜色对话框 if(Color.DoModal()==IDOK)//如果用户点击OK按钮 { m_nColor=Color.GetColor();//更改颜色,把颜色赋到m_nColor } }

6.填充色选择函数

void CDrawView::OnFullcolor() { CColorDialog FullColor;//创建颜色对话框 if(FullColor.DoModal()==IDOK)//如果用户点击OK按钮 { m_fColor=FullColor.GetColor();//更改颜色,把颜色赋到m_nColor } }

7.单击、移动、绘画函数

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { m_Down=TRUE; //鼠标按下 SetCapture(); //获取坐标 opoint=point; //把鼠标所在坐标赋给起点坐标opoint ReleaseCapture(); //释放坐标 CView::OnLButtonDown(nFlags, point); }

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { m_Down=FALSE; //鼠标不按下,即弹起 Invalidate(0); //刷新 CView::OnLButtonUp(nFlags, point); }

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) { if(m_Down) //如果鼠标按下 {

9 / 12

. cpoint=point; //把鼠标所在点坐标赋给终点坐标cpoint CClientDC dc(this); if(4==shape)//画曲线 { CPen pen(PS_SOLID,10,RGB(255,0,0)); CPen *oldpen=dc.SelectObject(&pen); dc.MoveTo(opoint); dc.LineTo(cpoint); dc.SelectObject(oldpen); opoint=cpoint; } } CView::OnMouseMove(nFlags, point); }

void CDrawView::OnPaint() { CPaintDC dc(this); // device context for painting CPen pen; //定义画笔 CBrush brush; //定义画刷 pen.CreatePen(penstyle,w, m_nColor); //创建画笔 brush.CreateSolidBrush(m_fColor); //创建画刷 dc.SelectObject(&pen); //获取画笔 dc.SelectObject(&brush); //获取画刷 if(1==shape)//画直线 { dc.MoveTo(opoint.x,opoint.y); dc.LineTo(cpoint.x,cpoint.y); //绘制直线,从opoint到cpoint连线 } if(2==shape)///画矩形 { dc.Rectangle(opoint.x,opoint.y,cpoint.x,cpoint.y); //绘制矩形 } if(3==shape)//画椭圆 { dc.Ellipse(opoint.x,opoint.y,cpoint.x,cpoint.y);//绘制椭圆 } }

8.菜单勾选函数

void CDrawView::OnUpdateLine(CCmdUI* pCmdUI) { pCmdUI->SetCheck(shape==1); //shape为1时,直线选项前打上勾 }

void CDrawView::OnUpdateRect(CCmdUI* pCmdUI) {

10 / 12

C++实验报告(MFC简单画图程序)

.3.改变线型在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w,m_nColor),线型处用penstyle表示,则改变penstyle的值即改变了画笔的类型。选择菜单绘图→线型选择线型,此时所选的线型就赋给线型变量penstyle。若不选择线
推荐度:
点击下载文档文档为doc格式
4g6cd1o0ne8wrp7230mk0mq5e7eayt017w4
领取福利

微信扫码领取福利

微信扫码分享