(画图vc程序设计)

合集下载

vc++画图板程序总结

vc++画图板程序总结

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++绘图编程

8
绘制线条
移动画笔位置 成员函数MoveTo() 用CDC成员函数 成员函数 pDC->MoveTo(x1,y1) ; 绘制直线 成员函数LineTo() 用CDC成员函数 成员函数 pDC->LineTo(x2,y2) ; 演示程序: 使用 使用CPen画线 画线.avi> 演示程序: <使用 画线
演示程序: 演示程序:画线函数处理.avi
11
画光栅点
pDC->SetPixel(x,y,(COLORREF)x+y);
COLORREF SetPixel( int x, int y, COLORREF crColor );
Parameters x
Specifies the logical x-coordinate of the point to be set.
演示程序:图形操作/画图形 演示程序:图形操作 画图形 Program 第三章图象编程 第三章图象编程.cpp-OnDrawGraph () -
14
写文字
pDC->TextOut(100,200,strText,lstrlen(strText);
virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount ); Parameters x
用笔( 对象) 用笔(CPen对象)绘制宽度为 点红色的实线 对象 绘制宽度为5点红色的实线
void CImageView::OnDraw(CDC* pDC) { … CPen penBlue(PS_SOLID,5,RGB(255,0,0)),*pOldPen; pOldPen=pDC->SelectObject(&penBlue); pDC->MoveTo(20,10); pDC->LineTo(200,100); pDC->SelectObject(pOldPen); penBlue.DeleteObject(); }

VC图形界面程序设计

VC图形界面程序设计
– 将基于控制台已经设计完善的这个类 comFinal移植到Windows程序中,并为它设计 对话框,并实现数据输入、输出功能。
Hale Waihona Puke 1. 在应用程序框架中包含并修改自定义类 【例1】 用VC++向导建立一个应用程序框 架,然后将先前建立的comFinal类的上 述2个文件添加到应用程序框架中。 • 过程如下
2. 在事件函数中操作类对象
• 应用程序框架中的每个类就像一个容器, 可以在其中包含其他类的对象,即可用 其他类定义它的对象成员。 • 如在例1建立的框架程序中,可以在应用 程序类MyProject、对话框类 MyProjectDlg中定义comFinal类的对 象,并通过对话框类的事件函数调用自 定义类的成员函数,实现需要的程序功 能。
(2) 在自定义类的源文件中增加对 stdafx.h头文件的包含
在comFinal.cpp文件中增加stdafx.h头文件包 含 /*comFinal.cpp*/ #include "stdafx.h" //不包含该头文件 将产生编译错误 #include "comFinl.h"
(3) 编译程序,这次不会有任何错误, 运行它将见到MFC默认的框架程序 界面
3.修改自定义类
• 现在来看看在自定义类的源程序中不包含 stdafx.h头文件会产生的问题。 (1)编译MyProject,将会见到如下错误信息:
– fatal error C1010: unexpected end of file while looking for precompiled header directive Chemistry.cpp – 这些错误指出在编译comFinl.cpp等源文件 时,没有找到需要的预编译头文件stdafx.h, 应该在comFinl.cpp中包含stdafx.h头文件。

计算机图形学 使用VC开发绘图程序的基本方法

计算机图形学  使用VC开发绘图程序的基本方法

七、思考题(尽量做,计入成绩) :
1、为什么要用 CDC 定义一个对象来作图? Windows 使用与设备无关的图形设备环境进行显示 。MFC 基础类库定义了设备环境对象类----CDC 类。 因为使用的是 mfc,如果是 sdk 的话就得用 dc,这个 cdc 想当是一个给设备画画的笔。 2、如果要绘制多条直线,应该如何编程?
4、 VC 中编程环境中,工程(project)是什么意义?为什么要用 project 的方式管理代码?
Project 文件的扩展名是 dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息, 每个工程都对应有一个 dsp 类型的文件。 clw 为扩展名的文件是用来存放应用程序中用到的类和资源的信 以 息的,这些信息是 VC 中的 ClassWizard 工具管理和使用类的信息来源。 因为用 project 的方式管理代码比较方便,可以看成是在一个文件夹下进行的。
3、 在 MyView.cpp 文件的 OnDraw 函数中加入如下代码。 pDC->MoveTo(100,100); pDC->LineTo(200,200); CPen *pOldPen; CPen dashPen; dashPen.CreatePen(PS_DASH,1,RGB(255,0,0)); pOldPen = pDC->SelectObject(&dashPen); pDC->LineTo(300,100); pDC->SelectObject(pOldPen); pDC->LineTo(400,200);
实验(No. 1
)题目:使用 VC 开发绘图程序的基本方法
实验目的及要求:
一、实验目的:
编写一个具有一定功能的 MFC 类库应用程序 (引入简单的视图/文档概念) 掌握 GDI 画图的基本方法, , 并调用系统函数画直线。

VC课程设计——VC基本绘图文档

VC课程设计——VC基本绘图文档

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,用于显示记录集,并建立相应的数据库操作菜单,用来显示记录集。

VC绘图简易教程_4

VC绘图简易教程_4

[学习目标]学会实现简单动画所谓动画,其实是连续显示一系列图形而已。

结合到程序上,我们需要以下几个步骤: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单文档中画图

VC单文档中画图
dc.SelectObject(pBrush); 这两行的代码就可以实现这样的效果。
3. 创 建 一 个 对 话 框 ( Setting ) 用 来 设 置 画 图 的 线 宽 。 同 时 在 ResourceView 中添加一个成员变量用来保存线宽。 添加一个静态文本以及一个编辑框。如图
为该对话框添加命令响应 当单击设置的时候,弹出 Setting 对话框对线宽进行设置。当再次打 开线宽设置的时候,保存上次所设置的线宽 void CGraphicView::OnSetting() {
m_nDrawType=3; }
void CGraphicView::OnEllipse() {
// TODO: Add your command handler code here m_nDrawType=4; } 开始画图要为鼠标左键按下和鼠标左键弹起添加 Windows Message Handler
鼠标左键按下去画图时我们要保存一个点。故添加一个成员变量来保 存这个点,并初始化。 CGraphicView::CGraphicView() {
// TODO: add construction code here m_nDrawType=0;//初始化画图类型 m_ptOrigin=0;//初始化鼠标左键原点 m_nLineWidth=0;//初始化线宽 } void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_ptOrigin=point; CView::OnLButtonDown(nFlags, point); } 鼠标左键弹起,画图 在前面添加了命令响应,m_nDrawTyoe=1 时,画图为点,2 为直线, 3 为矩形,4 为椭圆。下面,利用 switch 语句进行画图。 void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CClientDC dc(this);//创建画图 dc 对象

基于VC MFC程序设计——简易画图板

基于VC  MFC程序设计——简易画图板

包头师范学院本科学年论文论文题目:基于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绘图教程

VC绘图教程

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章VC++绘图程序设计chengxu

第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】在指定位置输出⽂字。

制图3VC绘图-PPT文档资料

制图3VC绘图-PPT文档资料

焦点消息
WM_SETFOCUS WM_KILLFOCUS
定时器消息
WM_TIMER
8
Windows应用程序的基本结构
下面以一个最简单的Windows程序为 例来说明其基本结构。
在Visual C++中新建一个Win32 Application的程序,选择建立一个A simple Win32 application程序
4
消息
在Windows程序设计中,消息是个极为重 要的概念,用户通过窗口界面的各种操作 最后都转化为发送到程序中的对象的各种 消息,下面介绍一些在Windows程序设计 中最常用的消息。
5
消息
窗口消息
WM_CREATE WM_DESTROY WM_CLOSE
键盘消息
WM_CHAR WM_KEYDOWN WM_KEYUP
9
Visual C++和MFC
Visual C++作为一个功能非常强大的可视化应用 程序开发工具,是计算机界公认的最优秀的应用
开发工具之一。
Visual C++ 6.0 Visual Studio 2019/2019
Visual C++的核心是Microsoft基础类库,即通常
所说的MFC(Microsoft Foundation Class)。
11
理解Visual C++的工程
Visual C++作为一种程序设计语言,它同时也是 一个集成开发工具,提供了软件代码自动生成和
可视化的资源编辑功能。在使用Visual C++开发
应用程序的过程中,系统为我们生成了大量的各 种类型的文件。

基于VC++ 绘图制作的课程设计报告

基于VC++ 绘图制作的课程设计报告

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编写简单的绘图程序

利用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文件中具体实现函数。

vc++(vs2010) windows编程与绘图程序设计

vc++(vs2010) windows编程与绘图程序设计

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。

C++简单画图程序课设

C++简单画图程序课设

目录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画图程序

VC画图程序

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画图的方法

Vc画图的方法
// TODO: add draw code for native data here
//设计窗口、视口
CRect rect;
GetClientRect(&rect);
pDC->Βιβλιοθήκη etMapMode(MM_ISOTROPIC);
pDC->SetViewportOrg(0,0);
pDC->SetViewportExt(rect.right,rect.bottom);
void closegraph();
3.函数
void line(int xs,int ys,int xe,int ye);
void lineto(int x,int y);
void moveto(int x,int y);
void linerel(int dx,int dy);//从当前位置点(CP)到与CP有一给定相对距离的点画一直线
setbkcolor(15);
setcolor(4);
ellipse(320,240,0,360,300,200);
setfillstyle(1,6);
putpixel(320,240,6);
floodfill(320,240,4);
getch();
closegraph();
}
EndPaint(hWnd, &ps);
break;
///自编的画图程序
void lineswep(HDC hdc)
{
int x=100,y=100;
int a=1,b=-3;
double d=1*(x+1)-3*(y+0.5)+200;
SetPixel(hdc, x, y, 0x0000ff);

VC图形程序设计基础课件

VC图形程序设计基础课件
第一步:启动Visual C++,选择工程方法 从开始菜单中选择 Visual C++,进入Visual C++集
成环境。从文件菜单中选择新建(New)命令,
2.1.2 应用程序工程的建立方法
弹出图2-2对话框。切换到工程(Projects)标 签,项目类型选择MFC AppWizard(exe),输 入工程的名字(如VcApp),选择项目放置的 位置,然后单击“确定”按钮。
GetCurrentBrush() 获取所选画刷的指针
GetCurrentFont() 获取所选字体的指针
GetCurrentPalette() 获取所选调色板的指针
GetCurrentPen() 获取所选画笔的指针
GetCurrentPosition() 获取画笔的当前位置
GetDeviceCaps() 获取显示设备能力的信息
GDI是Windows系统核心的三种动态链接库之一, 它管理Windows系统的所有程序的图形输出。在 Windows系统中,GDI向程序员提供了高层次的 绘图函数,只要掌握这些绘图函数,就可以很方 便地进行图形程序设计。
设备描述表(DC, Device Context)
DC是一个数据结构,当程序向GDI设备中绘图时, 需要访问该设备的DC。MFC将GDI的DC封装在C++ 类中,包括CDC类和CDC派生类,这些类中的许多 成员都是对本地GDI绘图函数进行简单封装而形成的 内联函数。
PolyLine()
绘制一组直线
RealizePalette() 将逻辑调色板映射到系统调色板
Rectangle()
绘制矩形
RoundRect() 绘制圆角矩形
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安科技大学《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);}⑷响应绘图命令,为工具命令添加消息响应函数。

相关文档
最新文档