VC++绘图编程
vc++基于mfc简单绘图
利用MFC简单绘图实验报告一、实验目的1、了解学会VC++ 6.0集成环境操作界面的使用;2、使用MFC进行可视化的编程;3、能够以交互方式在图形绘制区绘制点、直线、矩形、椭圆;4、设置线条的颜色、线型和线条宽度,对绘制的图元进行线条和填充属性的修改;二、简单的功能介绍1、画点:通过Ondot()函数实现2、画直线:通过OnLine()函数实现。
3、画矩形:通过OnRectangle()函数实现。
4、画圆角矩形:通过OnRoundrect()函数实现。
5、画椭圆:通过OnEllipse()函数实现。
6、铅笔工具:可以画任意线条。
通过直接在OnMouseMove(UINT nFlags, CPoint point)函数里面添加代码实现。
7、右键弹出菜单:可以在客户中点击鼠标右键,快速选择常用菜单。
通过OnContextMenu函数实现。
8、状态栏显示鼠标移动的坐标:在程序的右下角显示,通过调用setWidnowTextGetParent()实现。
9、画图颜色选择:可以画任何颜色的线条,通过OnColor()函数实现。
10、线条类型及线宽的设置:可以将画出的线条设置成实线、虚线、点线、点划线,双点划线,还可以设置线条的粗细,通过实例这一功能立刻显示所选择线条的粗细及线型。
通过新建CLineSettingDlg类,其中OnSelchangeLineStyle()函数实现线型的OnChangeEditLineWidth()函数实现线宽的改变。
再在CDrawView类中调用OnLineSetting()函数实现画笔的对话框,CLineSettingDlg类中的OnPaint()函数是实现示例功能的。
11、窗口的重绘时不擦除原来的内容:新建CShape类用来保存线条的颜色,线宽,填充色等属性,在窗口大小发生变化时有OnDraw(CDC* pDC)函数进行重绘工作,重绘中调用了各个绘图函数的Draw(CDC *pDC)函数。
vc6.0可视化编程实例 -回复
vc6.0可视化编程实例-回复vc6.0可视化编程实例是指在使用Microsoft Visual C++ 6.0编程工具进行可视化编程时的具体案例。
本篇文章将详细介绍vc6.0可视化编程实例的具体步骤和相关知识,以帮助读者更好地理解和应用可视化编程技术。
第一步:创建新项目首先,在vc6.0编程工具中点击“文件”菜单,选择“新建”->“项目”,然后在弹出的对话框中选择“Win32应用程序”作为项目类型。
接下来,填写项目名称、位置和解决方案等相关信息,点击“确定”按钮创建新项目。
第二步:设计界面在vc6.0中,可视化编程使用的是MFC(Microsoft Foundation Class)技术,通过使用控件和对话框设计工具来创建界面。
在解决方案资源视图中找到项目名称,展开后找到“资源文件”文件夹,并双击“资源文件.rc”文件,进入资源编辑器界面。
在资源编辑器中,用户可以通过拖放控件的方式设计界面。
例如,可以从“工具箱”控件面板中选择按钮控件,然后点击对话框中的位置放置按钮控件。
通过设置按钮的大小、位置、文字等属性来调整控件的外观。
在这个例子中,我们将在界面中放置一个按钮控件,用于实现一个简单的点击事件。
第三步:编写代码在界面设计完成后,我们需要为按钮添加点击事件的响应。
点击“类视图”选项卡,在其中找到对应的对话框类,通常以C开头,右键点击该类,选择“添加”->“函数”,并填写函数名称和返回类型等属性。
在弹出的函数编辑对话框中,输入要执行的代码。
例如,我们可以在按钮的点击事件函数中添加一段代码,用于弹出一个消息框显示一条消息。
在这个例子中,我们将添加一段代码,使点击按钮后弹出一个对话框,显示“Hello, world!”的消息。
第四步:编译和运行完成代码编写后,点击“生成”菜单,选择“生成解决方案”,或者直接按下F7键进行编译。
编译成功后,可以在输出窗口中查看编译结果。
接下来,点击“调试”菜单,选择“开始执行”或者按下F5键进行调试运行。
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(); }
visio vbc编程
visio vbc编程如何通过VBC编程在Visio中创建和修改绘图。
Visio是一种流程图和图表绘制工具,它可以使用户以视觉化方式展示复杂的数据和信息。
通过使用VBC编程语言,用户可以自动化创建和修改Visio 绘图,并为其添加各种功能和交互性。
在本文中,我们将探讨如何使用VBC编程来进行Visio绘图的创建和修改。
我们将按照以下步骤进行操作:第一步:了解VBC编程语言VBC是Microsoft Visual Basic for Applications的一种版本,它是一种灵活且易于学习和使用的编程语言。
VBC可以通过Microsoft Office系列产品(如Visio、Excel和Word)的宏来编写和执行代码。
在Visio中,用户可以使用VBC编程来创建和修改图形对象、控制绘图元素的属性以及实现自定义功能。
第二步:启动Visio并打开绘图首先,我们需要启动Visio应用程序,并打开我们想要进行编程的绘图。
我们可以通过访问Visio应用程序的对象模型来编程访问和操作绘图的各个方面。
第三步:创建新的形状接下来,我们将学习如何使用VBC编程在Visio中创建新的形状。
Visio提供了几种不同的形状类型供用户选择,例如矩形、圆形、箭头和文字框等。
我们可以使用VBC编程来创建这些形状,并设置它们的位置、大小和样式等属性。
第四步:修改形状属性一旦我们创建了形状,我们可以通过VBC编程来修改其属性。
例如,我们可以更改形状的大小、颜色、字体和边框样式等。
我们可以使用Visio应用程序对象模型中的属性和方法来实现这些修改。
第五步:创建连接线Visio不仅可以绘制单独的形状,还可以创建形状之间的连接线。
使用VBC编程,我们可以创建连接线对象,并将其连接到两个形状之间。
我们可以设置连接线的样式、颜色和宽度等属性,以及连接线的起点和终点。
第六步:实现自定义功能除了创建和修改形状和连接线之外,VBC编程还可以实现许多其他自定义功能。
VC6.0简单绘图说明
第二章VC6.0简单绘图说明许多学编程的都是从C 语言开始入门的,而目前的现状是:有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。
可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。
初学编程想要绘图就得用TC,很是无奈。
还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。
所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。
新的图形学的书有不少是用的OpenGL,可是门槛依然很高。
要给初学者一个简单的学习平台,就要VC的开发平台和TC的简单的绘图功能,于是就有了这个EasyX 库,我们需要在VC下下载安装EasyX库,下载地址:http:///。
下面是VC下简单绘图函数的基本说明。
1.系统支持操作系统版本:Windows 2000 及以上系统。
编译环境版本:Visual C++ 6.0 / 2008(x86 & x64) / 2010(x86 & x64)。
2.安装请先将下载的压缩包解压缩,然后执行Setup.hta,并跟随提示安装。
安装程序会检测已经安装的VC 版本,并根据选择将对应的.h 和.lib 文件安装至VC 的include 和lib 文件夹内。
安装程序不会修改注册表或者本机的任何文件。
如果需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别复制到VC 对应的include 和lib 文件夹内,或者将include 和lib 文件夹放到任意位置,然后修改VC 中的Lib 和Include 的引用路径。
3.卸载由于安装程序并不改写注册表,因此在“添加删除程序”中不会看到EasyX 的卸载项。
计算机图形学 使用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基本绘图文档设计一个矢量图形绘制程序一、运行环境: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
[学习目标]学会实现简单动画所谓动画,其实是连续显示一系列图形而已。
结合到程序上,我们需要以下几个步骤: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();}。
vc6.0可视化编程实例
vc6.0可视化编程实例VC6.0可视化编程实例目录:1. 引言2. VC6.0可视化编程简介3. 开发环境的搭建4. 实例介绍5. 实例实现步骤5.1 创建新的工程5.2 添加控件和设置属性5.3 编写代码逻辑5.4 编译和调试6. 结论1. 引言VC6.0是一款经典的集成开发环境(IDE),用于开发Windows 平台的应用程序。
其可视化编程能力使开发者能够通过拖拽控件、设置属性和编写代码来快速开发界面丰富的应用程序。
本文将通过一个具体的实例来介绍VC6.0的可视化编程过程。
2. VC6.0可视化编程简介VC6.0的可视化编程是基于MFC(Microsoft Foundation Classes)库实现的。
MFC是一套封装了Windows API的C++类库,它提供了丰富的控件和功能模块,方便开发者进行图形界面的设计和应用逻辑的实现。
VC6.0可视化编程通过拖拽控件和编写事件处理函数,实现应用程序的交互和功能逻辑。
3. 开发环境的搭建要进行VC6.0可视化编程,首先需要安装VC6.0开发环境。
您可以从官网或其他资源下载VC6.0安装文件,并按照安装向导进行安装。
安装完成后,打开VC6.0即可开始编程。
4. 实例介绍为了更好地理解VC6.0可视化编程,我们将以一个简单的实例为例:实现一个窗口应用程序,并在窗口中添加一个按钮。
点击按钮后,将弹出一个对话框显示一条信息。
5. 实例实现步骤5.1 创建新的工程打开VC6.0,在菜单栏中选择"File" > "New" > "Projects",选择"MFC AppWizard(Exe)",并填写相应的项目信息。
点击"OK",VC6.0将自动生成一个新的工程。
5.2 添加控件和设置属性在资源视图中,选择"Dialog"节点,双击它,打开资源编辑器。
VC++MFC鼠标做图编程实验
一、实验目的(1) 熟悉开发环境;(2) 掌握应用MFC类库编写鼠标绘图程序的方法;(3) 掌握MFC环境中绘图函数的使用方法。
二、实验内容创建一个单文档应用程序,实现鼠标的绘图功能。
要求:(1) 创建一个工具栏,有线段、矩形、椭圆三个按钮;(2) 绘图前,选择工具栏上的按钮,确定图形的形状。
按下鼠标左键,开始绘图,结合鼠标的光标坐标值,来确定图形的形状和大小,并随着鼠标的移动在屏幕上实时绘制图形,放开鼠标左键,确定最后的图形,绘制在屏幕上。
三、实验处理列表实现绘图功能的代码清单:1、代码如下#if !defined(AFX_PIC_H__00F5F2B9_A2A6_4ED6_907E_EC07AA16 8545__INCLUDED_)#defineAFX_PIC_H__00F5F2B9_A2A6_4ED6_907E_EC07AA168545__INCL UDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CPic{public:CPic();virtual ~CPic();void Draw(CDC *PDC);public:UINT m_nDrawType;int m_nX0;int m_nY0;int m_nX1;int m_nY1;};#endif// !defined(AFX_PIC_H__00F5F2B9_A2A6_4ED6_907E_EC07AA1685 45__INCLUDED_)2、代码如下:// Pic.cpp: implementation of the CPic class.////////////////////////////////////////////////////////////////////////#include ""#include "Shiyan8.h"#include ""#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CPic::CPic(){}CPic::~CPic(){}void CPic::Draw(CDC *pDC){CPen PenLN,*pOldPen;(PS_SOLID,3,RGB(255,0,0));pOldPen = pDC->SelectObject(&PenLN);switch(m_nDrawType){case 0:pDC->MoveTo(m_nX0,m_nY0);pDC->LineTo(m_nX1,m_nY1);break;case 1:pDC->Ellipse(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:pDC->Rectangle(m_nX0,m_nY0,m_nX1,m_nY1);break;}pDC->SelectObject(pOldPen);}3、程序如下:// Shiyan8View.cpp : implementation of the CShiyan8View class//#include ""#include "Shiyan8.h"#include "Shiyan8Doc.h"#include "Shiyan8View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CShiyan8ViewIMPLEMENT_DYNCREATE(CShiyan8View, CView)BEGIN_MESSAGE_MAP(CShiyan8View, CView)//{{AFX_MSG_MAP(CShiyan8View)ON_COMMAND(ID_DRAW_FILEOPEN, OnDrawFileopen)ON_UPDATE_COMMAND_UI(ID_DRAW_FILEOPEN, OnUpdateDrawFileopen)ON_COMMAND(ID_DRAW_FILESA VE, OnDrawFilesave)ON_UPDATE_COMMAND_UI(ID_DRAW_FILESA VE, OnUpdateDrawFilesave)ON_WM_LBUTTONDOWN()ON_WM_MOUSEMOVE()ON_WM_LBUTTONUP()//}}AFX_MSG_MAPON_COMMAND_RANGE(ID_DRAWTYPE_LINE,ID_DRAWTYPE_RECT,OnDrawType)ON_UPDATE_COMMAND_UI_RANGE(ID_DRAWTYPE_LIN E, ID_DRAWTYPE_RECT,OnUpdateDrawType)// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CShiyan8View construction/destructionCShiyan8View::CShiyan8View(){// TODO: add construction code herem_nDrawType = 0;m_nX0 = 0;m_nY0 = 0;m_nX1 = 0;m_nY1 = 0;m_nPicNum = 0;}CShiyan8View::~CShiyan8View(){}BOOL CShiyan8View::PreCreateWindow(CREATESTRUCT& cs) {// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CShiyan8View drawingvoid CShiyan8View::OnDraw(CDC* pDC){CShiyan8Doc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data herefor(int i=0;i<m_nPicNum;i++){m_Pic[i].Draw(pDC);}}/////////////////////////////////////////////////////////////////////////////// CShiyan8View printingBOOL CShiyan8View::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CShiyan8View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CShiyan8View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CShiyan8View diagnostics#ifdef _DEBUGvoid CShiyan8View::AssertValid() constCView::AssertValid();}void CShiyan8View::Dump(CDumpContext& dc) const{CView::Dump(dc);}CShiyan8Doc* CShiyan8View::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShiyan8Doc)));return (CShiyan8Doc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CShiyan8View message handlersvoid CShiyan8View::OnDrawFileopen(){// TODO: Add your command handler code here}void CShiyan8View::OnUpdateDrawFileopen(CCmdUI* pCmdUI){// TODO: Add your command update UI handler code herepCmdUI->Enable(FALSE);}void CShiyan8View::OnDrawFilesave(){// TODO: Add your command handler code herevoid CShiyan8View::OnUpdateDrawFilesave(CCmdUI* pCmdUI){// TODO: Add your command update UI handler code herepCmdUI->Enable(FALSE);}void CShiyan8View::OnDrawType(WORD nID){m_nDrawType = nID-ID_DRAWTYPE_LINE;}void CShiyan8View::OnUpdateDrawType(CCmdUI* pCmdUI){pCmdUI->SetRadio(m_nDrawType == pCmdUI->m_nID-ID_DRAWTYPE_LINE);}void CShiyan8View::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultm_nX0 = m_nX1 = ;m_nY0 = m_nY1 = ;CView::OnLButtonDown(nFlags, point);}void CShiyan8View::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);CPen PenBK,PenLN,*pOldPen;if(nFlags & MK_LBUTTON)(PS_SOLID,1,RGB(255,255,255)); (PS_DASH, 1,RGB(255,0,0)); pOldPen = (&PenBK);switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}(&PenLN);m_nX1 = ;m_nY1 = ;switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}(pOldPen);CView::OnMouseMove(nFlags, point);}void CShiyan8View::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default CClientDC dc(this);CPen PenBK,PenLN,*pOldPen;(PS_SOLID,1,RGB(255,255,255));(PS_SOLID,3,RGB(255,0,0));pOldPen = (&PenBK);switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}(&PenLN);m_nX1 = ;m_nY1 = ;switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}m_Pic[m_nPicNum].m_nDrawType = m_nDrawType;m_Pic[m_nPicNum].m_nX0 = m_nX0;m_Pic[m_nPicNum].m_nY0 = m_nY0;m_Pic[m_nPicNum].m_nX1 = m_nX1;m_Pic[m_nPicNum].m_nY1 = m_nY1;m_nPicNum++;(pOldPen);CView::OnLButtonUp(nFlags, point);}其他的程序略四、实验总结:1.在Resource View中展开menu资源菜单中,设计如下:2、在Resource View中展开Toorlbar资源菜单中,设计如下:3、本实验的一部分代码可以从实验六中复制过来,但应注意变量名称。
VC6.0简单绘图说明
第二章VC6.0简单绘图说明许多学编程的都是从C 语言开始入门的,而目前的现状是:有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。
可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。
初学编程想要绘图就得用TC,很是无奈。
还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。
所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。
新的图形学的书有不少是用的OpenGL,可是门槛依然很高。
要给初学者一个简单的学习平台,就要VC的开发平台和TC的简单的绘图功能,于是就有了这个EasyX 库,我们需要在VC下下载安装EasyX库,下载地址:http:///。
下面是VC下简单绘图函数的基本说明。
1.系统支持操作系统版本:Windows 2000 及以上系统。
编译环境版本:Visual C++ 6.0 / 2008(x86 & x64) / 2010(x86 & x64)。
2.安装请先将下载的压缩包解压缩,然后执行Setup.hta,并跟随提示安装。
安装程序会检测已经安装的VC 版本,并根据选择将对应的.h 和.lib 文件安装至VC 的include 和lib 文件夹内。
安装程序不会修改注册表或者本机的任何文件。
如果需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别复制到VC 对应的include 和lib 文件夹内,或者将include 和lib 文件夹放到任意位置,然后修改VC 中的Lib 和Include 的引用路径。
3.卸载由于安装程序并不改写注册表,因此在“添加删除程序”中不会看到EasyX 的卸载项。
VC源码-在控件中绘图
VC实现波形不闪烁动态绘图一、程序运行时波形效果二、在信号处理中,通常需要把采集信号的实时波形显示出来。
如果直接在屏幕上动态绘图的话,会出现闪烁现象,为了克服这个问题,本文采用的就是先在内存绘图,然后再拷贝到屏幕,从而实现动态绘图而不闪烁。
详细介绍如下:2.1首先在头文件中定义以下私有变量,并在对话框资源中放置一个picture控件private:CDC *pDC; //屏幕绘图设备CDC memDC; //内存绘图设备int m_High; //绘图起点int m_Low; //绘图终点int m_lCount[1024]; //数据存储数组int m_now; //记录波形当前点2.2在实现文件中初始化变量,并设置定时器BOOL CDrawTest::OnInitDialog()?{CDialog::OnInitDialog();// TODO: Add extra initialization herem_Low = 0;m_High = 1024;m_now =0;SetTimer(1,100,NULL);return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}2.3在定时器里创建内存绘图设备,并调用绘图函数在内存设备中绘图,绘图完毕后把内存设备中图拷贝到屏幕void CDrawTest::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCRect rect;CWnd* pWnd = GetDlgItem(IDC_COORD);//获得对话框上的picture的窗口句柄pWnd->GetClientRect(&rect);// 指针pDC = pWnd->GetDC();pWnd->Invalidate();pWnd->UpdateWindow();//内存绘图CBitmap memBitmap;CBitmap* pOldBmp = NULL;//创建内存绘图设备memDC.CreateCompatibleDC(pDC);memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom); pOldBmp = memDC.SelectObject(&memBitmap);memDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);//自定义绘图函数,详细见源程序DrawWave(&memDC);//把内存绘图拷贝到屏幕pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);memDC.SelectObject(pOldBmp);memDC.DeleteDC();memBitmap.DeleteObject();CDialog::OnTimer(nIDEvent);}void CDrawTest::DrawWave(CDC *pDC){CRect rect;CString str;int i;int m_left,m_top,m_right,m_bottom;int m_Interval = (m_High - m_Low)/10;if (m_Interval < 1) m_Interval = 1;CWnd* pWnd = GetDlgItem(IDC_COORD);pWnd->GetClientRect(&rect);pDC->Rectangle(&rect);m_left = rect.left+10;m_top = rect.top+10;m_right = rect.right-10;m_bottom = rect.bottom-20;int m_IntervalPan = (m_right - m_left)/11;if (m_IntervalPan < 1 ) m_IntervalPan =1;// 创建画笔对象CPen* pPenRed = new CPen;// 红色画笔pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));// 创建画笔对象CPen* pPenBlue = new CPen;// 蓝色画笔pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0, 255));// 创建画笔对象CPen* pPenGreen = new CPen;// 绿色画笔pPenGreen->CreatePen(PS_DOT,1,RGB(0,255,0));// 选中当前红色画笔,并保存以前的画笔CGdiObject* pOldPen = pDC->SelectObject(pPenRed);// 绘制坐标轴pDC->MoveTo(m_left,m_top);// 垂直轴pDC->LineTo(m_left,m_bottom);// 水平轴pDC->LineTo(m_right,m_bottom);// 写X轴刻度值for(i=0;i<10;i++){//str.Format(_T("%d"),m_Min+i*m_Interval);str.Format(_T("%d"),m_Low+i*m_Interval);pDC->TextOut(m_left+i*m_IntervalPan,m_bottom+3,str); }//str.Format(_T("%d"),m_Max);str.Format(_T("%d"),m_High);pDC->TextOut(m_left+10*m_IntervalPan,m_bottom+3,str);// 绘制X轴刻度for (i = m_left; i < m_right-20; i += 5){if ((i & 1) == 0){// 10的倍数pDC->MoveTo(i + 10, m_bottom);pDC->LineTo(i + 10, m_bottom+4);}else{// 10的倍数pDC->MoveTo(i + 10, m_bottom);pDC->LineTo(i + 10, m_bottom+2);}}// 绘制Y轴箭头pDC->MoveTo(m_right-5,m_bottom-5);pDC->LineTo(m_right,m_bottom);pDC->LineTo(m_right-5,m_bottom+5);// 绘制X轴箭头pDC->MoveTo(m_left-5,m_top+5);pDC->LineTo(m_left,m_top);pDC->LineTo(m_left+5,m_top+5);// 绘制Y轴网格选择绿色画笔pDC->SelectObject(pPenGreen);//int iTemp = (m_bottom - m_top)/5;for (i = 1 ;i <= 5 ;i++){pDC->MoveTo(m_left,m_bottom - i*iTemp);pDC->LineTo(m_right,m_bottom - i*iTemp);}//数组赋值if(m_now<1024){m_now++;}else{m_now = 0;}for(i = m_Low;i<m_High;i++){//m_lCount[i]=(rand()%10+rand()%100+rand()%1000)%1024; m_lCount[i] = (int)(sin(i-m_now)*204);}int xTemp;int yTemp;// 更改成蓝色画笔pDC->SelectObject(pPenBlue);for (i = m_Low; i <= m_High; i=i+3){xTemp = m_left+(i-m_Low)*m_IntervalPan/m_Interval; yTemp = m_bottom/2 - (int) (m_lCount[i] * m_bottom / 1024); if (yTemp < m_top) yTemp = m_top;if((xTemp >=m_left)&&(xTemp <=m_right)){pDC->MoveTo(xTemp, m_bottom/2);pDC->LineTo(xTemp, yTemp);}}// 恢复以前的画笔pDC->SelectObject(pOldPen);delete pPenRed;delete pPenBlue;delete pPenGreen;return; }。
VC图形编程
程序分析
C++程序的组成 Visual C++程序的组成 一个Visual C++ AppWizand生成的程序由四个 主要组成部分: 应用程序对象,主窗口对象,视 图对象和文档对象. 应用程序对象,在我们的程序中是CHelloApp, 是Windows程序运行时实际执行的第一个对象, 该对象的头文件和源程序文件分别是hello.h和 hello.cpp.当执行这个对象时,它会在屏幕上 显示一个主窗口.
生成的文件类型
与dsw类型的Workspace文件相配合的一个 重要的文件类型是以opt为扩展名的文件, 这个文件中包含的是在Workspace文件中要 用到的本地计算机的有关配置信息,所以 这个文件不能在不同的计算机上共享,当 我们打开一个Workspace文件时,如果系统 找不到需要的opt类型文件,就会自动地创 建一个与之配合的包含本地计算机信息的 opt文件.
Hello程序 Hello程序
下面我们介绍建立一个Hello程序的步骤. 1. 启动VC++6.0, 从File菜单中选择New选 项, 并在对话框中,选择Projects标签,然 后单击MFC AppWizard(exe).在Location 域中输入一个合适的路径名或单击 Browse按钮来选择一个.在Project name 中输入hello作为项目名称.这时候你会 看到hello也会出现在Location域中
生成的文件类型
首先要介绍的是扩展名为dsw的文件类型, 这种类型的文件在VC中是级别最高的,称 为Workspace文件.在VC中,应用程序是以 Project的形式存在的,Project文件以 .dsp扩展名,在Workspace文件中可以包含 多个Project,由Workspace文件对它们进 行统一的协调和管理.
利用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编程与绘图程序设计
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。
VC-easyx绘图游戏简易教程
1:创建新项目自己动手建立项目试试,并输入以下代码:#include <stdio.h>void main(){ printf("Hello World!");}然后,输入以下代码试试(无需理解代码含义):#include <graphics.h>#include <conio.h>void main(){initgraph(640, 480);line(200, 240, 440, 240);line(320, 120, 320, 360);getch();closegraph();}执行后应该可以看到屏幕正中央有一个十字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个点。
注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。
2. getch实现按任意键功能,按任意键后,程序继续执行。
否则,程序会立刻执行closegraph 以至于看不到绘制的内容。
[作业]用线条画出更多的图形,要求不少于10条直线。
[学习单步执行]完成作业后(务必完成),开始试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1. 将VC取消最大化,并缩小窗口,能看到代码就行。
Visual+C图形图像编程之一基础知识及基本绘图方法
为抵色处理和明髟i黾莸取或设置此c珥如对橐的呈现原点。
获取或设置此&舳对象的呈理质量。
’
获取或设置与此G螂妇对象关联的文本的呈理簋式。
获取戚设置此c嘶对象的全局变换。
创建完Graphics实例后,就可以使用表02中的方法来绘制 线条和形状、呈现文本或显示与操作图像等。与Gmphics一起使
∥编穆龌
绘翻一系列莲接一组B“m结构的拽殷。
n“哳
n№hr咖 mⅢh岫
m—蛳
绘制矗-山mP址对象。 绘橱一十麝形.谈扇形自一十坐标对、宽度和高度以及两条射线所指 定的椭翟定艾。
绘制由一组胁结构定义的当边形。
绘橱由坐标对、宽度和高度指定的矩形。
绘村一系列自R刚-n出结构指定的矩形。 在指定位置并且用指定的Bn吐和F缸对象绘铜指定的文本宇符串。
或者: Rectang『e rc=new Rectang}e(10,10,250,150): LinearGrad{entBrush br=new LjnearGrad}entBrush (rc. COIOr BhJe.CoIor Black.LinearGrad}entMOde BackwardDiagonaI):
瓣牺娄器釜篡梦
ARGB属性及其说明: 每一种颜色都是color结构的成员,以下是使用color结构
的一种典型的方式:
pn.Color=Color.Red;
‘
5.字体(Font类)。 Font类用以定义特定的文本格式,包括字体、字号和字形属 性。初始化一个Font实例既可以使用指定的属性也可以使用已 经存在的Font实例和Fontstyle枚举来初始化新的F0nt实例。, 具体如下:
表3 Pen类的常用属性及其说明
属
Vc画图的方法
//设计窗口、视口
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);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CDC::SelectObject()
Selects an object into the device context. The newly selected object replaces the previous object of the same type Return Value A pointer to the object being replaced.
演示程序: 演示程序:画线函数处理.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.
y
Specifies the logical y-coordinate of the point to be set.
crColor
A COLORREF RGB value that specifies the color used to paint the point. See COLORREF in the Platform SDK for a description of this value.
演示程序:图形操作/画图形 演示程序:图形操作 画图形 Program 第三章图象编程 第三章图象编程.cpp-OnDrawGraph () -
14
写文字
pDC->TextOut(100,200,strText,lstrlen(strText);
virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount ); Parameters x
16
位块转换函数
位块指的是位图中的一个矩形区域 位块的传输与转换是图形, 位块的传输与转换是图形,图像处理中的常规操作
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); x,y 目标位图的左上角坐标. 目标位图的左上角坐标. nWidth , nHeight 目标位图的宽度与高度. 目标位图的宽度与高度. pSrcDC 指针. 源CDC指针. 指针 xSrc,ySrc , 源位图的左上角坐标 dwRop 光栅操作标志 Bitblt()
17
位块转换函数中的光栅操作标志 dwRop
标识符 BLACKNESS DSTINVERT MERGECOPY MERGEPAINT NOTSRCCOPY NOTSRCERASE PATCOPY PATINVERT PATPAINT SRCAND SRCCOPY SRCERASE SRCINVERT SRCPAINT WHITENESS 含义 输出为全黑 对目标位图取反 源位图与点阵位图作" 源位图与点阵位图作"与"运算 源位图之反与目标位图作" 源位图之反与目标位图作"或"运算 源位图之反复制到目标位图 源位图与目标位图作"或"运算后再取反 源位图与目标位图作" 把点阵位图复制到目标位图 点阵位图与目标位图作"异或" 点阵位图与目标位图作"异或"运算 源位图之反与位图作" 运算,其结果再与目标位图作" 源位图之反与位图作"或"运算,其结果再与目标位图作"或"运算 源位图与目标位图作" 源位图与目标位图作"与"运算 把源位图复制到目标位图 目标位图之反与源位图作" 目标位图之反与源位图作"与"运算 源位图与目标位图作"异或" 源位图与目标位图作"异或"运算 源位图与目标位图作" 源位图与目标位图作"或"运算 输出为全白
Specifies the logical x-coordinate of the starting point of the text.
y
Specifies the logical y-coordinate of the starting point of the text.
lpszString
Points to the character string to be drawn.
பைடு நூலகம்nCount
Specifies the number of bytes in the string.
15
演示程序:图形操作 写文字 演示程序:图形操作/写文字
ImageView.cpp void DrawTextOnCanvus(CDC *pDC) { int x,y,nBkMode; char szText[]={"Visual C++.NET 图像处理演示程序 图像处理演示程序"}; nBkMode=pDC->SetBkMode(TRANSPARENT); x=90; y=370; pDC->TextOut(x,y,szText,lstrlen(szText)); pDC->SetBkMode(nBkMode); }
8
绘制线条
移动画笔位置 成员函数MoveTo() 用CDC成员函数 成员函数 pDC->MoveTo(x1,y1) ; 绘制直线 成员函数LineTo() 用CDC成员函数 成员函数 pDC->LineTo(x2,y2) ; 演示程序: 使用 使用CPen画线 画线.avi> 演示程序: <使用 画线
用笔( 对象) 用笔(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(); }
10
用标志在OnDraw函数中选择绘制线条 函数中选择绘制线条 用标志在 函数中选择绘制
void CImageView::OnDrawLine() //ImageView.cpp { bDrawLine=true; Invalidate(false); } void CImageView::OnDraw(CDC* pDC) {… if(bDrawLine) DrawLineOnCanvus(pDC); } void DrawLineOnCanvus(CDC* pDC) { CPen penSolidRed(PS_SOLID,10,RGB(255,0,0)); CPen *pOldPen; x1= 20; y1=100; pOldPen=pDC->SelectObject(&penSolidRed); pDC->MoveTo(x1,y1); pDC->LineTo(x2,y2); pDC->SelectObject(pOldPen); penSolidRed.DeleteObject(); }
13
画填色图形
pDC->Rectangle(100,100,150,150); pDC->RoundRect(100,100,150,150,15,15); pDC->Ellipse(100,100,150,150); pDC->Chord(100,100,225,300,175,250,225,300); pDC->Pie(100,100,300,200,250,150,300,150);
O
设备坐标系统 逻辑坐标系统
X
Y
Y
O
X
5
3.1.4 在窗口用户区绘图
函数中用参数CView类的指针 类的指针pDC在屏幕上绘图 在屏幕上绘图: 在OnDraw()函数中用参数 函数中用参数 类的指针 在屏幕上绘图 以画线为例
void CImageView::OnDraw(CDC* pDC) { CImageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC->MoveTo(20,10); pDC->LineTo(200,100); }
12
演示程序:图形操作 画光栅点 演示程序:图形操作/画光栅点
void CImageView::OnDrawPixel() // ImageView.cpp { bDrawPixel=true; Invalidate(false); } void CImageView::OnDraw(CDC* pDC) {… if(bDrawPixel) DrawPixelOnCanvus(pDC); } void DrawPixelOnCanvus(CDC* pDC) { void CImageView::DrawPixelOnCanvus(CDC* pDC) { for(int y=20;y<200;y++) for(int x=300;x<500;x++) pDC->SetPixel(x,y,(COLORREF)x+y); } }
VC++绘图编程 绘图编程
1
3.1设备环境类 设备环境类(CDC ) 设备环境类
设备环境(Device Context,DC),又称设备描述表或设备上下 设备环境 , , 是一种Windows的数据结构. 文,是一种 的数据结构. 在这个结构中保存了一些在绘图操作中使用的重要属性的 参数,还包含了与图形输出设备的绘制属性有关的信息. 参数,还包含了与图形输出设备的绘制属性有关的信息. 图形编程中, 在Windows图形编程中,所有的绘图操作都是通过设备环 图形编程中 境进行的. 境进行的. 设备环境可以用来向屏幕,打印机, 设备环境可以用来向屏幕,打印机,图形文件或内存位图 输出结果. 输出结果. CDC(Class of Device-Context )类. 类 CDC类提供了大量的绘图函数,坐标映射函数,裁剪函数, 类提供了大量的绘图函数, 类提供了大量的绘图函数 坐标映射函数,裁剪函数, 可以通过这个类来方便地实现图形显示. 可以通过这个类来方便地实现图形显示. 还有一些特殊的设备环境类都是从CDC类派生出来的. 类派生出来的. 还有一些特殊的设备环境类都是从 类派生出来的