(画图vc程序设计)
- 格式:doc
- 大小:1.56 MB
- 文档页数:22
VC++程序设计实验报告一、实验目的掌握MFC编程二、实验内容用MFC向导创建单文档应用程序,实现一个简单的画图程序。
●使用C++语言实现●使用VS2010集成开发环境开发●使用MFC应用程序开发框架三、实验步骤●基本功能描述1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、曲线、矩形及椭圆,线宽选项,有1-5可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。
●设计思路1. 对需要用到的变量进行初始化。
2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。
选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。
4. 选择图形或其它属性,可进行下一次绘制。
●软件设计A 设计步骤1.创建单文档创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。
创建成功后,系统自动生成相应的类,如图3所示。
图1 创建工程图2 创建单文档图3 生成类2.编辑菜单打开资源视图中的Menu-IDR_MAINFRAME添加需要的菜单项,如图4所示;并在菜单的属性中设定好所对应的ID,如图5所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符选项即可)。
VC基本绘图文档[键入作者姓名]VC基本绘图文档设计一个矢量图形绘制程序一、运行环境:Microsoft Visual C++ 6.0二、目标与任务:1.使设计的程矢量绘制图形序具有画点、画线、画多边形、画矩形的功能;2.其中所绘制的点、线、多边形具有保存的功能,并且能保存入数据库,数据库采用的access,文件名为shp.mdb,在设计的程序中使用ODBC访问数据库,DSN=shp,无同户名与密码;3.设计的绘图程序能读入数据库中的记录,而且可以通过自己建立的菜单[数据库操作]的子菜单[记录集导出]导出,显示在自己事先设计好的对话框设置中4.建立的[设置]菜单功能,其子菜单有[点的大小]、[线的宽度]功能。
三、程序总体结构图:四、各个功能模块详细设计1.画点画点流程图画点主要代码:2.画线画线主要代码:3.画矩形画矩形主要代码:4.画多边形画多边形的主要代码:五、数据库设计说明1.构造数据库,数据库采用access,.建立数据表,文件名为shp.mdb如下图5.2.创建ODBC数据源Windows中的ODBC组件出现系统的“控制面板”管理工具中,如下图所示:双击ODBC图标,进入ODBC数据源管理器。
然后创建用户用户DNS,过程如下下图:单击“添加”按钮,弹出创建数据源对话框,按下图选择用户所需的驱动程序(如下图):单击“完成”按钮进入指定驱动程序的安装对话框,单击“选择”按钮,将前面创建的数据库调入,结果如下图所示:单击“确定”按钮。
3.在自己的绘图MFC中绑定数据源建立新的类CShpSet类,其基类是CRecordset,单击“OK”,进入选择数据源对话框,按下图进行选择:如下图进入选择数据表对话框,选择自己已经建立过的shp.mdb数据表,如下图所示:单击“OK”,完成绑定数据源。
6.在MFC中建立显示此记录集对话框,其设计如下图所示:添加基于上图对话框的相应的类DisplayDataBaseDlg,其基类是CDlg,用于显示记录集,并建立相应的数据库操作菜单,用来显示记录集。
[学习目标]学会实现简单动画所谓动画,其实是连续显示一系列图形而已。
结合到程序上,我们需要以下几个步骤:1. 绘制图像2. 延时3. 擦掉图像循环以上即可实现动画。
[范例]举一个例子,我们实现一条直线从上往下移动:#include <graphics.h>#include <conio.h>void main(){initgraph(640, 480);for(int y=0; y<480; y++){// 绘制绿色直线setcolor(GREEN);line(0, y, 639, y);// 延时Sleep(20);// 绘制黑色直线(即擦掉之前画的绿线)setcolor(BLACK);line(0, y, 639, y);}closegraph();}再看一个例子,实现一个圆从左往右跳动:#include <graphics.h>#include <conio.h>void main(){initgraph(640, 480);for(int x=100; x<540; x+=20){// 绘制黄线、绿色填充的圆setcolor(YELLOW);setfillstyle(GREEN);fillellipse(x, 100, 20, 20);// 延时Sleep(500);// 绘制黑线、黑色填充的圆setcolor(BLACK);setfillstyle(BLACK);fillellipse(x, 100, 20, 20);}closegraph();}也就是说,移动的间距小、延时短,动画就会越细腻。
但当画面较复杂时,会带来画面的闪烁(怎样消除闪烁是以后的话题)。
[作业]绘制一个沿45 度移动的球,碰到窗口边界后反弹。
[改进]你的程序存在闪烁问题和不平滑看了半天,图形库还有批量画图,改进如下//这样的c底层,也不……,不过不失为初学者的首选#include <graphics.h>#include <conio.h>void main(){//说实话这个库没有自动检测initgraph(640, 480);//开始批量画图BeginBatchDraw();for(int y=0; y<480; ++y){// 绘制绿色直线setcolor(GREEN);line(0, y, 639, y);//继续画图FlushBatchDraw();// 延时单位毫秒,不精准的厉害, 别希望匀速Sleep(10);// 这里用背景色盖住就行cleardevice();}//结束批量绘图EndBatchDraw();closegraph();}#include <graphics.h>#include <conio.h>void main(){initgraph(640, 480);//开始批量画图BeginBatchDraw();for(int x=100; x<540; ++x) //缩小步长{// 绘制黄线、绿色填充的圆setcolor(YELLOW);setfillstyle(GREEN);fillellipse(x, 100, 20, 20);//继续画图FlushBatchDraw();// 延时Sleep(10);// 绘制黑线、黑色填充的圆cleardevice();}//结束批量绘图EndBatchDraw();closegraph();}。
包头师范学院本科学年论文论文题目:基于VC++MFC程序设计——简易画图板院系:信息科学与技术学院专业:计算机科学与技术学号:姓名:指导教师:撰写学年:2010至2011学年二零一零年十二月摘要本软件是利用VC++这个强大的可视化编程工具开发的,软件主要功能包括图形的绘制、线型的设置、颜色的设置,图形文件的重绘和保存等功能。
本文介绍了如何完成上述功能,同时详细阐述了画图系统的实现过程以及对画图系统所做的功能扩充。
在画图软件设计上,其主要任务是:实现“绘制图形”、“图形的保存”两项功能。
本软件具有实用性、稳定性、易用性,和可维护性的特点,应该说它应是一个开放性的软件,用户可以根据需要对其功能进行扩充、完善与修改,使其符合自己的要求。
总之,本软件是一个逐步完善的软件。
关键词:VC++;MFC;绘图AbstractThis software is using vc + + this powerful visual programming tool development, software main functions including graphics rendering, linetype Settings, color setting, graphics file redraw of preserving and function.The paper introduced how to accomplish these functions, and explains in detail drawing system realization process and to drawing system do function expansion. In drawing software design, its main task is to achieve "drawings", "graphic save" two functions.This software has practicability, stability, ease-of-use, and maintainability characteristic, should say it should be an open software, the user can according to the needs of its functions were expansion, perfect and modification, make them comply with their requirements. Anyhow, this software is a perfect gradually software.Key words:Vc + +; MFC; drawing目录引言 (1)第1章vc++6.0和MFC简介 (2)1.1 vc++6.0简介 (2)1.2 MFC简介 (2)第2章基础知识 (2)2.1工程的新建 (3)2.2单文档简介 (4)2.3添加消息响应函数 (5)2.4资源 (5)2.5设备环境 (6)第3章简易画图板的制作 (6)3.1设计目的 (6)3.2 总体设计 (7)3.3详细设计 (7)3.3.1点、直线、矩形、椭圆的绘制 (9)3.3.2连续线和扇形的绘制 (11)3.3.3画刷 (13)3.3.4设置对话框 (15)3.3.5颜色 (16)3.3.6打开与保存 (17)第4章结果及结论 (17)4.1运行结果 (17)4.2结论 (18)参考文献 (20)附录:简易画图板主要程序代码 (21)致谢 (31)引言计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随着计算机的发展得到了迅速的发展。
VC绘图/游戏简易教程--1:创建新项目 (1)VC绘图/游戏简易教程--2:简单绘图,学习单步执行 (1)VC绘图/游戏简易教程--3:熟悉更多的绘图语句 (2)VC绘图/游戏简易教程--4:结合流程控制语句来绘图 (3)VC绘图/游戏简易教程--5:数学知识在绘图中的运用 (5)VC绘图/游戏简易教程--6:实现简单动画 (6)VC绘图/游戏简易教程--7:捕获按键,实现动画的简单控制8 VC绘图/游戏简易教程--8:用函数简化相同图案的制作 (10)VC绘图/游戏简易教程--9:绘图中的位运算 (12)VC绘图/游戏简易教程--10:用鼠标控制绘图/游戏程序 (16)VC绘图/游戏简易教程--11:随机函数 (18)VC绘图/游戏简易教程--12:数组 (20)VC绘图/游戏简易教程--13:getimage / putimage / loadimag / saveimage / IMAGE 的用法 (25)VC绘图/游戏简易教程--14:位运算实现颜色分离处理 (27)VC绘图/游戏简易教程--16:设备上下文句柄 (29)VC绘图/游戏简易教程--1:创建新项目输入以下代码试试(无需理解代码含义):#include <graphics.h>#include <conio.h>void main(){initgraph(640, 480);line(200, 240, 440, 240);line(320, 120, 320, 360);getch();closegraph();}执行后应该可以看到屏幕正中央有一个十字。
VC绘图/游戏简易教程--2:简单绘图,学习单步执行[本期目标]学会简单绘图,并学会简单调试。
先看看上一课的代码,我加上了注释#include <graphics.h> // 绘图库头文件,绘图语句需要#include <conio.h> // 控制台输入输出头文件,getch()语句需要void main(){initgraph(640, 480); // 初始化640x480的绘图屏幕line(200, 240, 440, 240); // 画线(200,240) - (440,240)line(320, 120, 320, 360); // 画线(320,120) - (320,360)getch(); // 按任意键closegraph(); // 关闭绘图屏幕}解释一下:1. 创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。
第1章VC++绘图程序设计chengxu【例1-9】绘制⼀个三维空间中的线框⽴⽅体图。
在OnDraw函数中加⼊下⾯语句,就能够绘制出如图1-15所⽰的线框⽴⽅体图形。
pDC->MoveTo(80,80);pDC->LineTo(180,80);pDC->LineTo(220,30);pDC->LineTo(120,30);pDC->LineTo(80,80);pDC->LineTo(80,180);pDC->LineTo(180,180);pDC->LineTo(220,130);pDC->LineTo(220,30);pDC->MoveTo(180,80);pDC->LineTo(180,180);【例1-11】设计程序,按下上下左右键移动图形。
⾸先建⽴单⽂档项⽬,命名为draw。
在⽂件drawView.cpp各个函数定义的前⾯加⼊下⾯全局变量的定义,int x; int y; CPoint pt; CString str;在OnDraw函数中加⼊下⾯语句:CBrush brush,*oldbrush;brush.CreateSolidBrush(RGB(x+50,y+100,x+y));oldbrush=pDC->SelectObject(&brush);pDC->Ellipse(x+100,y+100,x,y);pDC->SelectObject(oldbrush);pDC->TextOut(pt.x+10,pt.y+10,"请使⽤键盘的上、下、左、右键控制⼩球移动!");pDC->TextOut(pt.x+10,pt.y-10,str);参考图1-16加⼊OnKeyDown事件函数,在该函数中添加下⾯代码,加⼊代码后如图1-20所⽰。
switch(nChar){case VK_LEFT: {x-=10; pt.x=x;} break;case VK_RIGHT: {x+=10; pt.x=x;} break;case VK_UP: {y-=10; pt.y=y;} break;case VK_DOWN: {y+=10; pt.y=y;} break;}Invalidate();【例1-15】在指定位置输出⽂字。
VC++程序设计课程设计报告书题目:绘图软件的设计班级:1091151学号:109115112姓名:郭若楠指导教师:姚璐周期:2011-12-19至2011-12-23 成绩:2011年12月23日一、课程设计的目的与要求(一)课程设计目的与任务通过本课程的学习使学生熟悉应用程序设计的基础知识,熟悉Windows编程,熟悉Windows应用程序的设计、编写、调试等过程。
对基本控件使用、文字处理、图形处理有较全面的认识,了解什么是数据源,还会怎样将数据源和控件建立关系和如何使用数据库进行编程。
(二)题目要求单文档应用程序,能够选择图形的类型(圆,矩形,直线,画笔),能够选择图形的颜色,能够对绘制的图形进行颜色填充(使用画刷),能够选择图形的线型(如实线,点线,虚线等),能够选择画线的颜色和线的宽度。
绘制效果参见开始程序中的画图。
二、设计正文1、系统分析用VC++.NET开发画图应用软件的功能。
实现和用户的交互,根据用户的选择来实现相应图形的绘制。
2、功能详细描述及框图以菜单选择为主,根据用户的不同菜单选择来改变当前所要绘制的图形。
用“绘图”菜单下的“类型”菜单来选择所要绘制的图形是圆、矩形、直线还是画笔。
用“绘图”菜单下的“线的颜色”菜单来编辑所要绘制图形的边框颜色。
用“绘图”菜单下的“填充颜色”菜单实现所绘制的圆和矩形进行颜色填充,用“绘图”菜单下的“线型”来实现对线性(实线、虚线、点线)。
菜单来选择边框的用“绘图”菜单下的“线宽”实现边框的粗细。
3、主要功能逻辑过程和实现算法图的绘制主要在鼠标的左键按下、鼠标移动、鼠标左键松开的事件中来完成。
类型、选择颜色、填充颜色、选择线型、线宽、等都用相应的变量值来表示。
当选择某一种操作后,相应的变量值会改变,依次来判断用户的选择。
实现算法如下:void ChuituView::OnLine(){type=1;// 直线}void ChuituView::OnElli(){type=2;// 圆}void ChuituView::OnRect(){type=3;//矩形}void ChuituView::OnPen(){type=4;// 画笔}void ChuituView::OnLButtonDown(UINT nFlags, CPoint point) {// 按下鼠标左键p1=p2=point;pen.CreatePen(style,width,color);pdc->SelectObject(&pen);if(tc){bsh.CreateHatchBrush(6,tccolor);pdc->SelectObject(&bsh);}else{pdc->SelectStockObject(NULL_BRUSH);}pdc->SetROP2(R2_NOTXORPEN);a=true;CView::OnLButtonDown(nFlags, point);}void ChuituView::OnMouseMove(UINT nFlags, CPoint point) {// 移动鼠标if(!a)return;if(type==1){pdc->MoveTo(p1.x,p1.y);pdc->LineTo(p2.x,p2.y);p2=point;pdc->MoveTo(p1.x,p1.y);pdc->LineTo(p2.x,p2.y);}else if(type==2){pdc->Ellipse(p1.x,p1.y,p2.x,p2.y);p2=point;pdc->Ellipse(p1.x,p1.y,p2.x,p2.y);}else if(type==3){pdc->Rectangle(p1.x,p1.y,p2.x,p2.y);p2=point;pdc->Rectangle(p1.x,p1.y,p2.x,p2.y);}else if(type==4){p2=point;pdc->MoveTo(p1.x,p1.y);pdc->LineTo(p2.x,p2.y);p1=point;}CView::OnMouseMove(nFlags, point);}void ChuituView::OnLButtonUp(UINT nFlags, CPoint point) {//释放鼠标左键pdc->SetROP2(R2_COPYPEN);if(type==1){pdc->MoveTo(p1.x,p1.y);pdc->LineTo(point.x,point.y);}else if(type==2){pdc->Ellipse(p1.x,p1.y,point.x,point.y);}else if(type==3){pdc->Rectangle(p1.x,p1.y,point.x,point.y);}else if(type==4){pdc->MoveTo(p1.x,p1.y);pdc->LineTo(point.x,point.y);}a=false;CView::OnLButtonUp(nFlags, point);}void ChuituView::Onxzlolor(){// 线条颜色选择CColorDialog dlg(0,CC_FULLOPEN);if(dlg.DoModal()){color=dlg.GetColor();}}void ChuituView::Ontccolor(){// 填充颜色CColorDialog dlg(0,CC_FULLOPEN);if(dlg.DoModal()){tccolor=dlg.GetColor();tc=true;}}void ChuituView::Onwtc(){// 无类型,直接用颜色填充tcstyle=5;tc=true;}void ChuituView::Onx(){width=1;}void ChuituView::Onc(){width=2;}void ChuituView::Onsx(){style=0;}void ChuituView::Onxx(){style=1;}5、页面设计(“类型”菜单)(“选择颜色”菜单)(“填充颜色”菜单)(“选择线型”菜单)(“线宽”菜单)6、系统测试三、小组成员分工说明独立完成四、课程设计总结或结论1 课程设计过程中出现的技术难点和解决方法:技术难点:图形颜色的填充解决方法:void ChuituView::Ontccolor(){// 填充颜色CColorDialog dlg(0,CC_FULLOPEN);if(dlg.DoModal()){tccolor=dlg.GetColor();tc=true;}}2 课程设计期间的主要收获:通过本次课程设计,我充分了解和掌握了图形的绘制和一些VC++的控件的使用,对这学期所学知识有了更深刻的掌握,。
利用VC编写简单的绘图程序上机实验环境亦可选择Microsoft Visual C++〔以下简称VC〕。
VC是美国微软公司生产的基于其Windows系统的软件开发工具。
它具有使用灵活,并与32位Windows内核〔使用于Windows 2000/Windows XP〕高度兼容的特点,从而被Windows程序员们广泛使用。
VC 在图形图像处理方面有着广泛的应用,MFC中提供了大量的图形图像函数,下面我们将对使用VC/MFC编写简单的绘图程序。
一、使用VC编写MFC单文档应用程序很简单,只需要按照下面几个步骤进行:1.翻开MSVC集成开发环境。
双击桌面或“开始〞菜单中的Microsoft VisualC++6.0,不久将看到VC的编辑窗口,如图3-5:图1 VC启动界面2.选择菜单“File | New〞,在弹出的对话框中1)单击上方的选项卡“Project〞,2)选择“MFC AppWizard(exe)〞,3)在“Project name〞一栏中填写工程名,例如draw,4)在“Location〞一栏中填写你想把文件存放的位置〔目录〕。
然后按“OK〞。
见图2。
注意:第4〕步中指定你自己的目录,不要使用系统的缺省目录或者随便放在根目录或者其他的目录下。
这样便于你找到自己编写的程序。
图2 应用程序向导主界面3.在MFC Appwizard-Step 1中选择“Single Document〞,即单文档应用程序,点击“Finish〞,如图3所示。
注意:对于下面的操作我们可以忽略,直接点Finish即可。
图3 应用程序向导中选择单文档视图4.系统弹出一个当前工程信息的对话框,如图4所示,直接点“OK〞即可。
图4 新建工程信息5.进入程序编写的主界面,屏幕左下方为工作区,如图5所示,工作区中共有三种视图,分别是:1)文件视图〔“FileView〞〕,主要包括头文件,cpp文件以及资源文件。
我们在头文件中一般添加类的定义,类的成员变量和函数的声明,而在cpp文件中具体实现函数。
1 Vc++2010开发平台概述 (3)1.1Vc++2010概述 (3)1.2 Visual Studio 2010 集成开发环境 (3)1.2.1安装Visual Studio 2010 (3)1.2.2配置Visual Studio 2010 (3)1.2.3解决方案和项目 (3)1.2.4生成和调试工具 (3)1.2.5部署工具 (3)1.2.6 Ribbon界面设计可视化 (4)2 Visual Studio 2010 MFC基本程序设计 (4)2.1 MFC应用程序概述 (4)2.1.1简单的MFC应用程序 (4)2.1.2 MFC应用程序分析 (4)2.2 MFC应用程序的创建 (4)2.2.1 用AppWizard创建CLR控制台应用程序 (4)2.2.2 用AppWizard创建win32控制台应用程序 (4)2.2.3 用AppWizard创建一个MFC应用程序 (5)2.3 MFC的类 (9)2.3.1 MFC应用程序中包含的类 (9)2.3.2 应用程序类 (10)2.3.3 主框架类 (10)2.3.4 视图类 (10)2.3.5 文档类 (10)2.3.6 对话框类 (10)2.3.7 菜单类 (10)2.3.8 线程基类 (10)3 Wndows窗体应用程序 (11)3.1 创建Wndows窗体应用程序 (11)3.2 窗体属性及设置 (12)3.3 窗体事件及处理 (13)3.4 窗体控件添加与编辑 (13)4 用户界面设计 (13)4.1 菜单设计 (13)4.1.1 菜单的类型 (13)4.1.2 菜单设计 (13)4.1.3 创建弹出式菜单 (20)4.1.4 创建动态菜单 (20)4.1.5 创建基于对话框的菜单 (20)4.2 工具栏设计 (20)4.3 状态栏设计 (20)5 对话框设计 (20)5.1 静态对话框 (20)5.1.1静态对话框的建立过程 (20)5.1.2静态对话框的应用 (21)5.2 非静态对话框 (31)5.3 通用对话框 (31)6常用控件 (31)6.1 公共控件 (31)6.2 容器 (31)6.3 数据控件 (31)7 键盘鼠标事件 (32)7.1键盘事件 (32)7.2 鼠标事件 (42)7.2.1客户区鼠标消息 (42)7.2.2非客户区鼠标消息 (45)7.2.3实例 (46)8 图形文本与图像处理 (51)8.1图形设备接口GDI(Graphics Device Interface) (51)8.2 设备上下文DC(device context) (54)8.2.1 设备上下文概述 (54)8.2.2 CDC类 (57)8.3 绘图环境 (60)8.3.1绘图环境介绍 (60)8.3.2映射模式与坐标系 (61)8.3.3绘图颜色 (71)8.3.4设置绘图属性 (72)8.3.6几何对象的结构和类 (79)8.4 画笔和画刷 (85)8.4.1画笔 (85)8.4.2画刷 (92)8.5 绘图 (99)8.5.1 绘图步骤 (99)8.5.2 画像素点 (100)8.5.3 画线状图 (100)8.5.4 拖放画动态直线 (105)8.5.5 画填充图 (109)8.5.6 清屏 (111)8.5.7 在控件上绘图 (112)8.6 文本绘制 (116)8.7 位图 (116)8.8 图标和光标 (116)8.9 图像处理 (116)9 文件处理 (116)10 数据库编程 (117)1 Vc++2010开发平台概述1.1Vc++2010概述1.2 Visual Studio 2010 集成开发环境1.2.1安装Visual Studio 20101.2.2配置Visual Studio 20101.2.3解决方案和项目1.2.4生成和调试工具1.2.5部署工具1.2.6 Ribbon界面设计可视化2 Visual Studio 2010 MFC基本程序设计2.1 MFC应用程序概述2.1.1简单的MFC应用程序2.1.2 MFC应用程序分析2.2 MFC应用程序的创建2.2.1 用AppWizard创建CLR控制台应用程序2.2.2 用AppWizard创建win32控制台应用程序2.2.3 用AppWizard创建一个MFC应用程序1.打开vc++2010,从起始页中选择“新建项目”如图2.2.3.1。
目录1.基本功能描述 ....................................................................................................... - 1 -2.设计思路 ............................................................................................................... - 1 -3.软件设计 ............................................................................................................... - 4 -3.1 设计步骤 .................................................................................................... - 4 -3.2 界面设计 .................................................................................................... - 9 -3.3 关键功能的实现 ........................................................................................ - 9 -4.结论与心得体会 ................................................................................................. - 10 -5.参考文献 ............................................................................................................. - 11 -6.思考题 ................................................................................................................. - 11 -7.附录 ..................................................................................................................... - 12 -7.1 调试报告 .................................................................................................. - 12 -7.2 测试结果 .................................................................................................. - 13 -7.3 关键源代码 .............................................................................................. - 15 -简单画图程序1.基本功能描述1)设计一个程序可完成绘制直线,矩形和椭圆的功能。
VC++015-画图程序摘要:画图软件的基本功能包括基本图形绘制和填充(直线、椭圆、三角形、四边形、多边形),更改图元绘制条件(改变线条颜色、线型、填充方式)和图元的保存功能。
要求:实现所见即所得绘图功能;实现图元选择功能;实现图元移动功能;实现画笔和画刷风格认定功能;实现图元修改功能;实现图形文件的存储功能。
能过程序设计以达到提高VC的编程水平的目的。
关键字:程序框架,用户界面目录1 引言31.1目的和内容31.2Visual C + +概述31计算机图形学的发展41.1计算机图形学软件的发展51.2计算机图形学算法的发展51.3 计算机图形学的应用62 系统功能设计72.1 程序功能模块72.2 系统界面设计73系统功能的实现83.1 图形设备接口简介83.2 绘制基本图形103.3 画笔与画刷134.设计说明书18总结18致谢19参考文献:19附录20程序功能模块绘图应用程序中,我们将实现一般绘图应用程序所具有的绝大多数功能,并提供一些额外的辅助功能。
具体而言,其实现的功能主要包括如下方面。
1、绘制图元可以通过绘图工具栏绘制下列图元直线图元,或者称为线段图元,允许用户使用鼠标选择直线顶点绘制。
曲线图元,允许用户拖动鼠标画出任意形状的曲线。
椭圆图元,允许用户拖动鼠标控制椭圆的外接矩形,来进行绘制。
矩形图元,使用鼠标控制矩形的位置和外形。
绘图操作都能够被撤消或恢复。
2、改变绘制条件在绘制图元时,还可使用图元属性页进行图元属性的修改,包括:颜色设定:包括画笔颜色,画刷颜色以及背景颜色。
风格设定:包括画笔的线条和宽度,画刷的填充范围及形状等3、绘图辅助本程序所提供的辅助功能有:选定绘图区域清洁绘图区域定位图形坐标,并在状态栏显示4、文件持久性对于应用程序来说文件的持久性十分重要,要不能保证这一点,应用程序就很难说有什么存在价值。
本应用程序能够完成图形文件的保存、打开、打印,而且提供了将所绘图形转换为位图存储的功能。
西安科技大学《VC++程序设计》实验报告题目画图院、系(部)计算机科学与技术学院专业及班级学号姓名:szgkb日期 2014.6.21 题目要求建立一个通过“画图”程序,它是基于MFC的多文档应用程序,并且应用程序的风格样式具有Office视觉样式的Ribbon风格。
在实现程序的过程中,要创建具有Office视觉样式的项目,再为应用程序的Ribbon功能区添加相应的绘图命令。
在实现绘图中,能够很好地使用CDC类中的绘图函数,以实现直线、矩形、圆弧、椭圆等的绘制。
了解MFC中设备环境类和坐标映射方式,并且了解常用的GDI对象。
扩展“画图”程序实现图形的绘制、保存、滚动等功能。
2 功能需求选择“绘图”选项卡后,将会展开一些绘图工具。
选择某个绘图工具后,便可以在客户区中绘制相应的图形,还可以点击面板上的“画笔颜色”和“填充颜色”按钮,利用弹出的颜色对话框分别设置绘图的颜色及填充的颜色,而且单击“文本”按钮还可以在客户区中输入文本内容,在文本输入中,涉及到文本的颜色、插入符的位置、字体、退格、回车、文本字符等的正确处理。
3 总体设计建立一个MFC的基于对话框的应用程序,取名为MyPaint1。
接下来创建Ribbon 功能区,创建了“工具”、“颜色”两个面板。
新建绘图类CDrawShape用以封装自由线、直线、矩形、椭圆、圆的绘制过程。
在CMyPaint1View中响应绘图命令并通过添加鼠标左键按下以及移动的消息响应函数(OnLButtonDown、OnMouseMovehe、 OnLButtonup)来实现图形绘制。
另外设置插入符、文本内容、文本颜色,来实现文本的输出。
最后进行对绘图光标的修改。
3.1 系统模块3.2 系统业务处理流程运行“画图”程序“绘图”菜单工具面板客户区绘图颜色面板保存图形⑴创建MyPaint1项目。
建立基于MFC的多文档应用程序,并且程序的风格样式具有Office视觉样式的Ribbon风格。
⑵创建Ribbon功能区。
正确添加工具按钮图像,添加一个菜单资源并为其添加相应的菜单命令、设置属性。
在CMainFrame类的InitializeRibbon函数中创建“绘图”列表,并且创建面板、添加工具按钮,代码如下:void CMainFrame::InitializeRibbon(){//……//添加“绘图”类别CMFCRibbonCategory* pCategoryDraw=m_wndRibbonBar.AddCategory(_T("绘图(&D)"),IDB_DRAWSMALL,IDB_DRAWLARGE);//创建“工具”面板CMFCRibbonPanel* pPanelTool=pCategoryDraw->AddPanel(_T("工具"));pPanelTool->Add(new CMFCRibbonButton(ID_DRAW_PEN,_T("画笔"),0,0));pPanelTool->Add(new CMFCRibbonButton(ID_DRAW_LINE,_T("直线"),1,1));pPanelTool->Add(new CMFCRibbonButton(ID_DRAW_RECT,_T("矩形"),2,2));pPanelTool->Add(new CMFCRibbonButton(ID_DRAW_ELLIPSE,_T("椭圆"),3,3));pPanelTool->Add(new CMFCRibbonButton(ID_DRAW_CIRCLE,_T("圆"),4,4));pPanelTool->Add(new CMFCRibbonSeparator());pPanelTool->Add(new CMFCRibbonButton(ID_DRAW_ERASER,_T("橡皮擦"),8,8));pPanelTool->Add(new CMFCRibbonButton(ID_DRAW_TEXT,_T("文本"),9,9));//创建“颜色”面板CMFCRibbonPanel* pPanelColor=pCategoryDraw->AddPanel(_T("颜色"));pPanelColor->Add(new CMFCRibbonButton(ID_DRAW_COLOR,_T("画笔颜色"),10,10));pPanelColor->Add(new CMFCRibbonButton(ID_FILL_COLOR,_T("填充颜色"),11,11));bNameValid=strTemp.LoadString(IDS_RIBBON_STYLE);//……}⑶新建绘图类。
使用MFC向导添加新类CDrawShape,CDrawShape类的绘图成员根据绘图类型调用设备环境CDC中的函数绘制图形并指定颜色填充图形。
void CDrawShape::DrawPen(CDC* pDC, POINT point){ASSERT(m_dwShapeType==SHAPE_PEN);//画笔m_ptBegPoint=m_ptEndPoint;m_ptEndPoint=point;CPen *pOldPen,pen;pen.CreatePen(PS_SOLID,1,m_crDrawColor);pOldPen=(CPen*)pDC->SelectObject(&pen);pDC->MoveTo(m_ptBegPoint);pDC->LineTo(m_ptEndPoint);pDC->SelectObject(pOldPen);}void CDrawShape::DrawLine(CDC* pDC,POINT point){ASSERT(m_dwShapeType==SHAPE_LINE);//直线m_ptEndPoint=point;CPen *pOldPen,pen;pen.CreatePen(PS_SOLID,1,m_crDrawColor);pOldPen=(CPen*)pDC->SelectObject(&pen);pDC->MoveTo(m_ptBegPoint);pDC->LineTo(m_ptEndPoint);pDC->SelectObject(pOldPen);}RECT CDrawShape::GetShapeRect(POINT ptBeg,POINT ptEnd) {CRect rtShape(ptBeg,ptEnd);//构造矩形rtShape.NormalizeRect();return rtShape;}void CDrawShape::DrawRect(CDC* pDC, POINT point){ASSERT(m_dwShapeType==SHAPE_RECT);//矩形m_ptEndPoint=point;m_rtShapeRect=GetShapeRect(m_ptBegPoint,m_ptEndPoint); CPen *pOldPen,pen;pen.CreatePen(PS_SOLID,1,m_crDrawColor);pOldPen=(CPen*)pDC->SelectObject(&pen);CBrush *pOldBrush,brush;brush.CreateSolidBrush(m_crFillColor);pOldBrush=(CBrush*)pDC->SelectObject(&brush);pDC->Rectangle(&m_rtShapeRect);pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush);}void CDrawShape::DrawEllipse(CDC* pDC, POINT point) {ASSERT(m_dwShapeType==SHAPE_ELLIPSE);//椭圆m_ptEndPoint=point;m_rtShapeRect=GetShapeRect(m_ptBegPoint,m_ptEndPoint); CPen *pOldPen,pen;pen.CreatePen(PS_SOLID,1,m_crDrawColor);pOldPen=(CPen*)pDC->SelectObject(&pen);CBrush *pOldBrush,brush;brush.CreateSolidBrush(m_crFillColor);pOldBrush=(CBrush*)pDC->SelectObject(&brush);pDC->Ellipse(&m_rtShapeRect);pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush);}RECT CDrawShape::GetCircleRect(POINT ptBeg, POINT ptEnd) {CRect rtShape(CRect(ptBeg,ptEnd));//规范化矩形rtShape.NormalizeRect();int cx=rtShape.Width();int cy=rtShape.Height();int diameter=(cx<=cy)?cx:cy;if(ptBeg.x<=ptEnd.x)rtShape.left=ptBeg.x,rtShape.right=ptBeg.x+diameter; elsertShape.left=ptBeg.x-diameter,rtShape.right=ptBeg.x;if(ptBeg.y<=ptEnd.y)rtShape.top=ptBeg.y,rtShape.bottom=ptBeg.y+diameter; elsertShape.top=ptBeg.x-diameter,rtShape.bottom=ptBeg.y;return rtShape;}void CDrawShape::DrawCircle(CDC* pDC, POINT point){ASSERT(m_dwShapeType==SHAPE_CIRCLE);//圆m_ptEndPoint=point;m_rtShapeRect=GetShapeRect(m_ptBegPoint,m_ptEndPoint); CPen *pOldPen,pen;pen.CreatePen(PS_SOLID,1,m_crDrawColor);pOldPen=(CPen*)pDC->SelectObject(&pen);CBrush *pOldBrush,brush;brush.CreateSolidBrush(m_crFillColor);pOldBrush=(CBrush*)pDC->SelectObject(&brush);pDC->Ellipse(&m_rtShapeRect);pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush);}void CDrawShape::DrawEraser(CDC* pDC, POINT point) {ASSERT(m_dwShapeType==SHAPE_ERASER);//橡皮擦m_ptBegPoint=m_ptEndPoint;m_ptEndPoint=point;CPen *pOldPen,pen;pen.CreatePen(PS_SOLID,8,RGB(255,255,255));pOldPen=(CPen*)pDC->SelectObject(&pen);pDC->MoveTo(m_ptBegPoint);pDC->LineTo(m_ptEndPoint);pDC->SelectObject(pOldPen);}⑷响应绘图命令,为工具命令添加消息响应函数。