VC++绘图基础

合集下载

VC绘图简易教程

VC绘图简易教程

VC绘图游戏编程入门——刘小备整理目录前言 (3)1:创建新项目 (4)2:简单绘图,学习单步执行 (5)3:熟悉更多的绘图语句 (7)4:结合流程控制语句来绘图 (9)5:数学知识在绘图中的运用 (11)6:实现简单动画 (13)7:捕获按键,实现动画的简单控制 (14)8:用函数简化相同团的制作 (16)9:绘图中的位运算 (18)10:用鼠标控制绘图/游戏程序 (22)11:随机函数 (24)12:数组 (26)13:getimage / putimage / IMAGE的用法 (30)14:通过位运算实现颜色的分离与处理 (32)15:窗体句柄(windows编程入门) (34)16:设备上下文句柄(windows编程入门2) (35)前言学习目标能做简单的图形小游戏讲解以简单实用为主,不要指望看了这几篇文章就能过耳机考试锻炼编程思想学习方式自学为主学习要求多实践使用平台VC++ 6.0请到下载最新的EasyX,并安装百度easyx吧发帖说明1:创建新项目学会在VC里面创建项目,并写简单的程序VC写程序要有项目的概念,一个项目可以有多个.cpp文件,多个项目构成一个工作区。

记住这两个英文单词:Workspace:工作区Project:项目以下是创建项目的视频演示:/p/vcgraphics/downloads/list下载VC6_new_project.zip,打开看看,flash格式的。

看明白后,自己动手简历项目试试,并输入以下代码:#include<stdio.h>V oid main(){Printf(“Hello World!”);}然后输入以下代码试试(无需理解代码含义)#include<graphics.h>#include<conio.h>V oid main(){Initgraph(640,480);Line(200,240,440,240);Line(320,120,320,360);Getch();Closegraph();}执行后应该可以看到屏幕正中央有一个十字。

VC++6.0绘图基础

VC++6.0绘图基础
• 类属:CDC::SetViewportExt • 原型:virtual CSize SetViewportExt( int cx, int cy ); • 返回值:原视区范围的CSize对象。 • 参数说明:cx视区x范围的逻辑坐标,cy视 区y范围的逻辑坐标。
4. 设置窗口坐标原点函数
• 类属:CDC::SetWindowsOrg • 原型:virtual CPoint SetWindowsOrg( int x, int y ); • 返回值:原窗口原点的CPoint对象。 • 参数说明:参数x,y是窗口的新原点坐标。
2.3.3 CDC类的主要绘图成员函数
1. 绘制像素函数
• 类属:CDC::SetPixel • 原型:COLORREF SetPixel(int x,int y,COLORREF crColor ); • 设置某像素点的RGB值
1. 绘制像素函数
• 参数说明:SetPixel 函数中,COLORREF是32位 颜色数据类型; • 第一和第二个参数x,y是像素点位置的逻辑坐标 值, • 第三个参数crColor是像素点的颜色值, COLORREF型变量可以利用RGB(bRed, bGreen,bBlue)来指定相应的颜色值,每种颜 色用一个字节表示,可以被设定为0~255之间的 任意值,0代表无色,255代表全色。
MFC上机操作过程
• 启动Microsoft Visual C++ 6.0 • 从【File】菜单中选择【New】命令,弹出【New】 对话框,切换到【Projects】选项卡。 • 在左边窗口中选择MFC AppWizard(exe),在 右边的Projects name文本框中键入应用程序名, 这里输入Test,在Location文本框中出现用于存 放应用程序的根目录,这里设置为D:\Test。其 余保持默认值。如图所示。单击【OK】按钮。

第03章 VC绘图基础

第03章 VC绘图基础

二、设备环境 2.2 CPaintDC
CPaintDC对象代表了一个窗口的绘图画面, 使用CPaintDC对象的基本操作步骤是:
• 创建一个CPaintDC对象; • 在CPaintDC对象上绘图; • 撤消该CPaintDC对象。
CPaintDC创建器会自动调用BeginPaint()方 法,并返回该绘图DC,以便用于绘图;同样, 撤消器也会自动调用EndPaint()方法。
一、框架、文档、视图和使用它们的应用程序
应用程序对象
文档模板
工具条
文档
视图
状态条
SDI框架结构
一、框架、文档、视图和使用它们的应用程序
1、应用程序对象
这是由CWinApp派生的应用程序类对象。一个应用程序有且仅有 一个应用程序对象,它负责应用程序实例的初始化和进程结束 时的资源清除,以及创建和管理应用程序所支持的所有文档模 板。 任何Windows应用程序都包含一个WinMain()函数,框架应用程 序也一样,只是框架中的WinMain()函数由MFC类库提供并被隐 藏,在框架应用程序启动时调用。应用程序对象的 InitInstance()函数就是由WinMain()函数调用的。
文档—视图结构中各对象的交互关系如下图,在文档—视 图结构中各对象创建以后,程序员应覆盖本应类的成员函 数,以对各对象做具体的初始化。在视图类中覆盖 OnInitialUpdate()是初始化视图的最适合方法,覆盖文 档类的OnNewDocument和OnOpenDocument成员函数可以为 文档做特定的初始化。
Visual C++绘图基础
第03部分
一、框架、文档、视图和使用它们的应用程序
所谓框架(FrameWork),就是应用程序所应具备的软件模块 按一定的结构组成的集合,基于MFC的应用程序框架是定义了 程序结构的MFC类库中类的集合,是Visual C++编程的骨架。 MFC框架的核心是文档—视图结构(Document—View Architecture),这是一个很有用,但又往往较难以入门的功 能。简单地说,文档—视图结构就是将数据和对数据和观察或 数据的表现(显示)相分离,文档仅处理数据的实际读、写操 作,视图则是显示和处理数据的窗口,视图可以操作文档中的 数据。 MFC框架的基本结构包括应用程序对象、主框窗口、文档、视 图等,框架通过命令和消息将它们结合在一起,共同对用户的 操作做出响应。 下图表示了MFC框架结构和各对象之间的关系。应用程序管理 着一个(SDI)或多个(MDI)文档模板,每个文档模板管理着 一个或多个文档。用户通过主框窗口中的视图观察和处理数据。

计算机图形学 使用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 画图的基本方法, , 并调用系统函数画直线。

第二章Visual+C++6.0++绘图基础

第二章Visual+C++6.0++绘图基础
参数参数参数x1x1y1y1是限定绘弧范绘的外接矩形左上角点坐是限定绘弧范绘的外接矩形左上角点坐参数参数x2x2y2y2是限定绘弧范绘的外接矩形右下角点坐是限定绘弧范绘的外接矩形右下角点坐参数参数x3x3y3y3不一定绘格位于参数不一定绘格位于参数参数参数x4x4y4y4也不一定绘格位参数也不一定绘格位参数画笔界绘
OnDraw(CDC* pDC)函数
void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
•pDC定义为CDC类的指针。 •pDoc通过GetDocument()函数得到了指向文档类 CTestDoc的指针。 •ASSERT_VALID(pDoc)函数使pDoc指针有效。使用 pDC指针,可以对CDC类的成员函数进行操作。 •注意:OnDraw函数是由系统框架直接调用的,程序一 运行就会自动执行。
MFC
Microsoft Foundation Class Library
微软基类库MFC是以C++形式封装 的Windows API(Application Program Interface),包含了几百 个已经定义好的常用类。
继承图表
2.2MFC的上机操作步骤
建立单文档应用程序框架,工程名为“Test”
单击“OK”按钮
单击“Finish”按 钮
ClassView面板
显示类和成员函数
ClassView面板可以看出:
CMainFrame类,派生自CFrameWnd 类。包括主框架,包含 标题栏、菜单栏、工具栏和状态栏。 •CTestApp类,派生自CWinApp,代表了应用程序的主线 程。基于框架生成的应用程序必须有且仅有一个从 CWinApp 派生的类的对象theApp,在创建窗口之前先构 造theApp 。 •CTestDoc类,派生自CDocument类。文档类负责管理和 维护数据本身。 • CTestView类,派生自 CView类。以某种形式表示文档 数据,所以称之为视图,用户操作的主要界面。 •MFC中的数据是存储在CTestDoc类文档中,结果的显示是 在CTestView类中。

VC绘图基础

VC绘图基础

标准彩色的RGB值
颜色 红色 绿色 蓝色 黄色 青色 紫色 白色 RGB,255 255,255,0 0,255,255 255,0,255 255,255,255 颜色 深红 深绿 深蓝 深黄 深青 灰色 黑色 RGB分量值 RGB分量值 128,0,0 0,128,0 0,0,128 128,128,0 0,128,128 192,192,192 0,0,0
2 使用画笔和画刷绘制图形
画笔和 画刷是 Windows中两种最重要的绘图工具 , 画笔 和 画刷 是 Windows 中两种最重要的绘图工具, 画笔用于绘制点、 画笔用于绘制点、线、矩形和椭圆等几何图形, 矩形和椭圆等几何图形, 画刷用指定的颜色和图案来填充绘图区域, 画刷用指定的颜色和图案来填充绘图区域,这些 绘图工具又统称为GDI对象。 绘图工具又统称为GDI对象。 在默认状态下, 在默认状态下,当用户创建一个设备环境并在其 中绘图时, 中绘图时,系统使用设备环境缺省的绘图工具及 其属性。 其属性。如果要使用不同风格和颜色的绘图工具 进行绘图, 进行绘图,用户必须重新为设备环境设置自定义 的画笔和画刷等绘图工具。 画笔和画刷等绘图工具。
如果采用MFC 方法编程, MFC提供了不同类型的 如果采用 MFC方法编程 , MFC 提供了不同类型的 DC类,每一个类都封装了DC句柄,并且它们的构 DC类 每一个类都封装了DC句柄, 造函数自动调用获取DC的API函数, 造函数自动调用获取DC的API函数,析构函数自动 调用释放DC的API函数。因此, 调用释放DC的API函数。因此,在程序中通过声明 一个MFC 设备环境类的对象就自动获取了一个DC , 一个 MFC设备环境类的对象就自动获取了一个 DC, 而当该对象被销毁时就自动释放了获取的DC 。 而当该对象被销毁时就自动释放了获取的 DC。 MFC AppWizard应用程序向导创建的OnDraw( )函数 AppWizard应用程序向导创建的OnDraw( 自动支持所获取的DC。 自动支持所获取的DC。 MFC 的 DC 类 包 括 CDC 、 CPaintDC 、 CClientDC 、 CWindowDC和CMetaFileDC等 其中 CDC类是 MFC CWindowDC和CMetaFileDC等 ,其中CDC类是MFC 设备环境类的基类, 其它的 MFC设备环境类都是 设备环境类的基类 , 其它的MFC 设备环境类都是 CDC的派生类。 CDC的派生类。

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

VC6屏幕的绘图基础总结

VC6屏幕的绘图基础总结

VC6屏幕的绘图基础总结VC6屏幕的绘图基础总结VC6屏幕的绘图基础总结在VC6中,屏幕绘图是通过设备环境(Device Context)实现的,它是GDI的的关键元素。

一、设备环境获取的一些函数:WINUSERAPI HDC WINAPI GetDC(HWND hWnd); //获取窗口的设备环境WINUSERAPI HDC WINAPI GetWindowDC( HWND hWnd);WINGDIAPI HDC WINAPI CreateCompatibleDC(HDC);二、设备环境的坐标:(1)、设备坐标:指的是显示设备或者打印设备坐标系下的坐标。

这种坐标以设备上的像素点为坐标单位,通常情况下,它的原点在窗口客户区的左上角。

(2)、逻辑坐标:指的是各种映射模式下的坐标。

(3)、物理坐标:指的是开发人员自定义的坐标。

三、设备环境的颜色COLORREF数据类型,用8位十六进制值0x00bbggrr表示一个RGB(红、绿、蓝)值,每个颜色分量的最大值为0xff。

获取一个COLORREF变量的各分量颜色值的宏:BYTE GetRValue(DWORD rgb); //取得红色分量值BYTE GetGValue(DWORD rgb); //取得绿色分量值BYET GetBValue(DWORD rgb); //取得蓝色分量值COLORREF RGB(BYTE red,BYTE green,BYTE blue);四、使用GDI对象定义GDI对象后,要用SelectObject()函数把定义的GDI对象选择用在当前的环境中。

例如:HDC hdc;HBRUSH hbr;hdc=GetDC(hwnd);hbr=CreateSolidBrush(RGB(255,0,0));SelectObject(hdc,hbr);五、使用画刷画刷(HBRUSH)可以用来填充指定区域的特性。

画刷通常包括填充颜色、填充图案、填充样式3种属性。

计算机图形学之VisualC绘图基础

计算机图形学之VisualC绘图基础
【New】对话框,切换到【Projects】选项 卡。 ➢ 在左边窗口中选择MFC AppWizard(exe), 在右边的Projects name文本框中键入应用程 序名,这里输入Test,在Location文本框中 出现用于存放应用程序的根目录,这里设置为 D:\Test。其余保持默认值。如图所示。单 击【OK】按钮。
ASSERT_VALID(pDoc); } ➢ pDC定义为CDC类的指针。 ➢ pDoc通过GetDocument()函数得到了
指向文档类CTestDoc的指针。
OnDraw(CDC* pDC)函数
void CTestView::OnDraw(CDC* pDC) {
CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); } ➢ ASSERT_VALID(pDoc)函数使pDoc指针有 效。使用pDC指针,可以对CDC类的成员函 数进行操作。 ➢ 注意:OnDraw函数是由系统框架直接调用 的,程序一运行就会自动执行。
全部展开FileView 面板后,显示如图 的界面内容
本书后续的编程过程 中一般使用的是 CTestView类的 TestView.h头文 件和 TestV(CDC* pDC)函数
void CTestView::OnDraw(CDC* pDC) {
CTestDoc* pDoc = GetDocument();
➢ 在微软基类库MFC中,CDC类是定义设 备上下文对象的基类,所有绘图函数都 在CDC基类中定义。
2.2节内容
➢ 2.2.1 CDC类结构和GDI对象 ➢ 2.2.2 映射模式 ➢ 2.2.3 CDC类的主要绘图成员函数 ➢ 2.2.4 设备上下文的调用和释放 ➢ 2.2.5 VC++绘制图形的几种方法

VC++绘图基础课件

VC++绘图基础课件

pDC->MoveTo(20,30);
移动画笔到(20,30)
pDC->LineTo(200,300);
从(20,30)画线到(200,300)
pDC->SelectObject(OldPen);
将线画成蓝色
6. 绘制矩形函数
类属:CDC::Rectangle 原型:BOOL Rectangle(int x1,int y1,
语句:COLORREF c; 注释:变量c用于存放像素点的颜色值
语句:pDC->SetPixel(20,20,RGB(255,0,0)); 注释:在屏幕的(20,20)坐标位置处,绘制
一个红色的像素点
语句: c=pDC->GetPixel(20,20); 注释: c保存该像素点的颜色
语句: pDC->SetPixel(60,20,c); 注释:在像素点(60,20)处以颜色值c绘制一个
像素点。
3. 画笔函数
画笔是用来绘制直线、曲线或图形的边界 线,是绘图工具类之一
画笔通常具有线型、宽度和颜色三种属性 画笔的线型通常有实线、虚线、点线、点
划线、双点划线、不可见线和内框架线7 种,这些线型都是以PS_为前缀的预定义 标识符
5. 绘制直线函数
⑴设置直线的起点位置 CPoint MoveTo(int x,int y); ⑵设置直线的终点位置 BOOL LineTo (int x,int y); 参数说明:
采用起点闭区间,终点开区间的处理方法 绘制直线的函数不指定直线的颜色,直线颜
色可以通过画笔函数来指定。
在使用VC++的画刷之前必须先创建或选择 画刷对象。

第二章Visual C++6.0 绘图基础

第二章Visual C++6.0  绘图基础
MFC中,CDC类是定义设备上下文对象的基类,封装了绘 图所需的所有函数。当输出文字或图形时,就需要调用
CDC类的成员函数,这些成员函数具备绘制和打印图形
的功能。 本节讲解的例程全部在CTestView类的成员函数
OnDraw()中实现。
2.3.1 CDC类结构和GDI对象
CDC类派生了CClientDC类、CMetaFileDC类、 CPaintDC类和CWindowDC类。
void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; GetClientRect(&rect); pDC->SetMapMode(MM_ANISOTROPIC pDC->SetWindowExt(rect.Width(),rect.Height pDC->SetViewportExt(rect.Width(),-rect.Height pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2 }
本章内容
2.1 面向对象程序设计基础
2.2 MFC上机操作步骤
2.3 MFC基本绘图函数 2.4 本章小结
2.1 开发工具的选择
Turbo C: 控制台程序,不支持交互操作。 只能显示16色,不能开发光照和带阴影的程序。
Turbo C 绘制的Menger海绵
Visual C++: 可以显示真彩色,有1678万色。 支持交互式绘图。

VC绘图简易教程_6_共7页

VC绘图简易教程_6_共7页

实际中有许多类似的图案,如果一一单独绘制,太麻烦。

于是,我们需要一个公用的绘制过程,就是函数。

例如,我们需要画5个三角形,位于不同的位置。

我们可以将绘制单个三角形的过程写成函数,函数内是一个独立的程序段,这个绘制过程很简单。

然后,在需要绘制的时候,调用这个函数即可。

可以通过参数来解决细微差异(图案的坐标、颜色等),例如:#include <graphics.h>#include <conio.h>//在坐标(x,y)处,用颜色c绘制三角形void sanjiaoxing(int x, int y, int c){//设置画线颜色setcolor(c);//画三角形的三条边line(x, y, x+50, y);line(x, y, x, y+50);line(x+50, y, x, y+50);}void main(){initgraph(640, 480); //初始化图形窗口sanjiaoxing(100, 100, RED);sanjiaoxing(120, 160, BLUE);sanjiaoxing(140, 220, GREEN);sanjiaoxing(160, 120, BLUE);sanjiaoxing(160, 160, GREEN);sanjiaoxing(220, 140, GREEN);getch(); //按任意键继续closegraph(); //关闭图形窗口}再结合循环等控制条件,就能绘制更复杂漂亮的图案了。

试试运行下面程序,理解一下函数的用处:#include <graphics.h>#include <conio.h>void sanjiaoxing(int x, int y, int color){//设置画线颜色setcolor(color);//画三角形的三条边line(x, y, x+10, y);line(x, y, x, y+10);line(x+10, y, x, y+10);}void main(){initgraph(640, 480); //初始化图形窗口for(int x=0; x<640; x+=10)for(int y=0; y<480; y+= 10)sanjiaoxing(x, y, RGB(x*255/640, y*255/480, 0));getch(); //按任意键继续closegraph(); //关闭图形窗口}本节作业:1.绘制Windows自带游戏“扫雷”的初始界面。

第二章 VC绘图基础

第二章 VC绘图基础
// TODO: Add your message handler code here dc.TextOut(0,0,"在OnPaint函数中使用"); dc.Ellipse(20,20,100,100); // Do not call CView::OnPaint() for painting messages }
CMetaFileDC
CPaintDC
CWindowDC
2.1 windows图形系统
CWindowDC类与CPaintDC和CClientDC类的区 别:
用CPaintDC类和CClientDC类的对象绘制图形时,绘制 区只能是客户区,而不能在非客户区,而CWindowsDC 可以在非客户区进行图形绘制。
2.2 CDC类的绘图成员函数
2. 在视图窗口以外的窗口中使用
窗口类提供WM_PANT消息响应函数OnPaint,以便绘制或重绘,还 必须使用CPaintDC 派生类对象。在使用OnPaint后,OnDraw失效。 void CTestView::OnPaint() {
CPaintDC dc(this); // 定义了一个对象dc
COLORREF GetPixel(int x ,int y ) const; COLORREF GetPixel(POINT point ,) const;
2.2 CDC类的绘图成员函数
32 位的 COLORREF 类型值来确定图形颜色值 ,其结构为 0x00bbggrr, bb:代表蓝色值,范围从00到FF; gg:代表绿色值,范围从00到FF; rr:代表红色值,范围从00到FF; 还可以用RGB宏来完成相同的功能:
2.2 MFC上机步骤
1. 启动VC++6.0, 从File菜单中选择New选 项, 并在对话框中,选择Projects标签, 然后单击MFC AppWizard(exe)。在 Location域中输入一个合适的路径名或单 击Browse按钮来选择一个。在Project name中输入test作为项目名称。

VC图形程序设计基础

VC图形程序设计基础
例如,从VcApp Classes中找到CVcAppView的OnDraw() 函数,如图2-9所示。双击OnDraw()函数,这时系统会打 开VcAppView.cpp文件,而且光标正置于OnDraw()函数 中,在其中输入下列语句:
pDc->TextOut(30,30,” 同 学 们 好 , 欢 迎 使 用 VC++ 编 程!”);
获取当前设置映射模式 获取给定像素的RGB颜色值 获取多边形填充模式 获取文本颜色 获取文本的宽度和高度 获取当前文本的信息 获取DC窗口的指针 绘制灰色文本 绘制直线 设置当前画笔位置 绘制饼图 绘制多边形
*** ***** *** **** ** ** ** *** ****** ****** *** ***
把像素设定为给定的颜色
******
SetTextColor() 设置文本颜色
******
StretchBlt() TextOut()
把 位 图 从 一 个 DC 拷 贝 到 另 一 个 DC,并根据需要扩展或压缩位图
绘制字符串文本
* *****
设置绘图模式:SetROP2
CDC::SetROP2
int SetROP2(int nDrawMode); 返回绘图模式的前一次取值
GetCurrentBrush() 获取所选画刷的指针
GetCurrentFont() 获取所选字体的指针
GetCurrentPalette() 获取所选调色板的指针
GetCurrentPen() 获取所选画笔的指针
GetCurrentPosition() 获取画笔的当前位置
GetDeviceCaps() 获取显示设备能力的信息
使用频率
**** * ** ** ** *** **** *** ***

vc深入详解之绘图控制

vc深入详解之绘图控制

VC++深入详解之绘图控制2009-12-18 12:291.简单绘图:1)新建一个单文档类型的MFC AppWizard(exe)工程;2)为此程序添加一个子菜单,并为其添加四个菜单项,分别用来控制不同图形的绘制,修改每个菜单项的ID号,并分别为这四个菜单项添加命令响应函数;3)当用户单击某个菜单项时,应该把用户的选择保存起来,以便后面的绘图操作使用,所以为View类添加一个私有变量来保存用户的选择,在视类的构造函数中将此变量初始化为0,选择不同的菜单项时,该变量为不同的值。

4)画图不外乎由2个点来确定:鼠标按下(获取起始坐标)+鼠标弹起(获取最终坐标+响应函数)。

而菜单项响应仅仅是起标记作用;其最终结果是由鼠标弹起响应,因此就需要为视类分别捕获鼠标左键按下和松开这两个消息,按下时需要将鼠标当前点保存起来(所以再为视类添加一个CPoint类型的私有成员变量,并在构造函数中初始化);5)在鼠标左键按下消息响应函数中,保存当前点,void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or calldefaultm_ptOrigin=point;//保存当前点CView::OnLButtonDown(nFlags, point);}6)在鼠标左键松开消息响应函数中实现绘图功能,void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);//绘图之前需要有DC对象switch (m_nDrawType){case 1://画点dc.SetPixel(point,RGB(255,0,0));break;case 2://画直线dc.MoveTo(m_ptOrigin);//移动到原点dc.LineTo(point);//绘制到终点break;case 3://画矩形dc.Rectangle(CRect(m_ptOrigin,point));break;case 4://画椭圆dc.Ellipse(CRect(m_ptOrigin,point));break;}CView::OnLButtonUp(nFlags, point);}7)绘图函数控制:线条的颜色是由DC中画笔的颜色确定的,这样就需要构造一个CPen对象,并为它指定一种颜色,然后将此画笔选入设备描述表中,在鼠标左键松开消息响应函数中实现CPen pen(PS_SOLID,m_NLineWidth,RGB(255,0,0)); //构造一个CPen对象,指定线型,线宽,颜色dc.SelectObject(&pen);//将此画笔选入设备描述表中8)不想使用DC默认的白色画刷来填充矩形内部,而希望能够看到这些图形的内部内容,可以把DC的画刷设置为透明的。

VisualC++绘图基础

VisualC++绘图基础

• 形象地说,一个设备环境提供了一张画布和一些
绘画的工具,我们可以使用不同颜色的工具在上
202面1/3/绘6 制点、线、圆和文本。
18
中国矿业大学 环境与测绘学院
2 Window图形绘制基本概念
• 设备环境中的“设备”是指任何类型的显示器或 打印机等输出设备,绘图时用户不用关心所使用 设备的编程原理和方法。所有的绘制操作必须通 过设备环境进行间接的处理,Windows自动将设 备环境所描述的结构映射到相应的物理设备上。
2021/3/6
2
中国矿业大学 环境与测绘学院
1 VC++编程入门
1.1生成一个新的图形界面工程
2021/3/6
3
中国矿业大学 环境与测绘学院
1 VC++编程入门
2021/3/6
4
中国矿业大学 环境与测绘学院
1 VC+境与测绘学院
2021/3/6
6
24
中国矿业大学 环境与测绘学院
2 Window图形绘制基本概念
4)RGB宏
很 多 涉 及 到 颜 色 的 GDI 函 数 都 需 要 使 用 COLORREF类型的参数,如设置背景色的成员函数 CDC::SetBkColor() 、 设 置 文 本 颜 色 的 成 员 函 数 CDC::SetTextColor()。例如:
MFC 的 DC 类 包 括 CDC 、 CPaintDC 、 CClientDC 、 CWindowDC和CMetaFileDC等,其中CDC类是MFC设 备环境类的基类,其它的MFC设备环境类都是CDC 的派生类。
2021/3/6
21
中国矿业大学 环境与测绘学院
2 Window图形绘制基本概念

计算机图形学VC++绘图基础

计算机图形学VC++绘图基础

四、绘制基本图形
7. 其他绘图函数 (2) CRect的构造函数
* 绘制椭圆 BOOL Ellipse( int x1, int y1, int x2, int y2 ); BOOL Ellipse( LPCRECT lpRect ); (3) 画饼图 BOOL pie (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL pie (LPCRECT lpRect, POINT ptStart, POINT ptEnd);
四、绘制基本图形
7. 其他绘图函数 (2) CRect的构造函数 CRect();
CRect( int l, int t, int r, int b ); CRect( POINT topLeft, POINT bottomRight ); * 绘制矩形 void FrameRect( LPCRECT lpRect, CBrush* pBrush ); void FillRect( LPCRECT lpRect, CBrush* pBrush ); Rectangle (int x1, int y1, int x2, int y2); Rectangle (LPCRECT lpRect); * 绘制椭圆 BOOL Ellipse( int x1, int y1, int x2, int y2 ); BOOL Ellipse( LPCRECT lpRect );
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
四、绘制基本图形
5. 设置当前画笔 CPen的构造函数 CPen(); CPen( int nPenStyle, int nWidth, COLORREF color); CPen的CreatePen函数 BOOL CreatePen(int nPenStyle, int nWidth, COLORREF color); 例: CPen *pOld, pen( PS_DOT, 1, RGB( 255, 0, 0)); pOld=pDC->SelectObject(&pen); 绘图 pDC->SelectObject(pOld);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.2.3 CDC类的主要绘图 成员函数
1. 绘制像素函数

类属:CDC::SetPixel 原型:COLORREF SetPixel(int x,int y,COLORREF crColor ); 设置某像素点的RGB值
1. 绘制像素函数

参数说明:SetPixel 函数中,COLORREF是32 位颜色数据类型; 第一和第二个参数x,y是像素点位置的逻辑 坐标值, 第三个参数crColor是像素点的颜色值, COLORREF型变量可以利用RGB(bRed,bGreen, bBlue)来指定相应的颜色值,每种颜色用一 个字节表示,可以被设定为0~255之间的任意 值,0代表无色,255代表全色。
(3)删除画笔函数


类属:CGdiObject::DeleteObject 原型:BOOL DeleteObject( ); 返回值:非零。 参数说明:画笔使用完毕,把已成自由状 态的画笔从系统内存中清除。
(4)选择一支库画笔函数



类属:CDC::SelectStockObject 原型: virtual CGdiObject *SelectStockObject(int nIndex); 返回值:被替代的CGdiObject类对象的指针。
void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); COLORREF c; pDC->SetPixel(20,20,RGB(255,0,0)); c=pDC->GetPixel(20,20); pDC->SetPixel(60,20,c); }
WHITE_PEN
NULL_PEN
宽度为1的白笔实线笔
透明笔
4. 画刷函数


VC++中的画刷用于对图形内部进行填充, 也是绘图工具类之一 在使用VC++的画刷之前必须先创建或选择 画刷对象。
画刷SolidBrush(COLORREF crColor );
2.
绘图工具类
绘图工具类
绘图工具类

CGdiObject类:GDI绘图工具的基类,一般 不能直接使用。 CBitmap:封装了一个GDI位图,提供位图操 作的接口。 CBrush类:封装了GDI画刷,可以选作设备 上下文的当前画刷。画刷用于填充图形内部。
绘图工具类

CFont:封装了GDI字体,可以选作设备上 下文中的当前字体。 CPallette:封装了GDI调色板,提供应用 程序和显示器之间的颜色接口。 CPen:封装了GDI画笔,可以选作设备上 下文的当前画笔。画笔是用于绘制图形边 界线。
3. 画笔函数

默认的画笔是一个像素单位的黑色实线 要想更换画笔,可以在创建新画笔对象后, 将其选入设备上下文,就可使用新画笔进 行绘图。
画笔的风格
风格代码 PS_SOLID PS_DASH PS_DOT PS_DASHDOT PS_DASHDOTDOT PS_NULL PS_INSIDEFRAME 线型 实线 虚线 点线 点划线 宽度 任意指定 1(不可任意指定) 1(不可任意指定) 1(不可任意指定) 颜色 纯色 纯色 纯色 纯色 纯色 纯色 纯色
双点画线 1(不可任意指定) 不可见线 1(不可任意指定) 内框架线 任意指定
(1)创建画笔函数




类属:CPen::CreatPen 原型:BOOL CreatePen(int nPenStyle, int nWidth,COLORREF crColor); 返回值:非零。 参数说明:
语句:
pDC->SetPixel(60,20,c); 注释:在像素点(60,20)处以颜色值c绘制一个 像素点。
3. 画笔函数



画笔是用来绘制直线、曲线或图形的边界 线,是绘图工具类之一 画笔通常具有线型、宽度和颜色三种属性 画笔的线型通常有实线、虚线、点线、点 划线、双点划线、不可见线和内框架线7 种,这些线型都是以PS_为前缀的预定义 标识符
例6 绘制左上角点为(100,100),右下角点 为(600,300)的矩形。矩形边框为一像素宽 的蓝色边界线,内部填充红色
void CTestView::OnDraw(CDC* pDC) { CBrush MyBrush,*OldBrush; CTestDoc* pDoc = GetDocument(); MyBrush.CreateSolidBrush(RGB(255,0,0)); ASSERT_VALID(pDoc); OldBrush=pDC->SelectObject(&MyBrush); CPen MyPen,* OldPen; pDC->Rectangle(100,100,600,300);// 画矩形 MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); pDC->SelectObject(OldPen); //画框线为蓝 OldPen=pDC->SelectObject(&MyPen);
pDC->MoveTo(20,30);
移动画笔到(20,30)
pDC->LineTo(200,300);
从(20,30)画线到(200,300)
pDC->SelectObject(OldPen);
将线画成蓝色
6. 绘制矩形函数



类属:CDC::Rectangle 原型:BOOL Rectangle(int x1,int y1, int x2,int y2); 返回值:非零。 参数说明:该函数使用当前画刷填充矩形 内部,并用当前画笔绘制矩形边界线。
2.2.2 映射模式
把图形显示在屏幕坐标系中的过程称为映射 根据映射模式的不同可以分为 逻辑坐标
设备坐标
逻辑坐标的单位是米制尺度或其它与字体相关
的尺度 设备坐标的单位是像素
映射模式
模式代码
MM_TEXT MM_LOMETRIC MM_HIMETRIC MM_LOENGLISH MM_HIENGLISH
映射模式
在缺省情况下,一般使用的是设备坐标系
MM_TEXT,坐标原点位于客户区的左上角, X轴水平向右,Y轴垂直向下,坐标基本单 位为一个像素。
1. 设置映射模式函数

类属:CDC::SetMapMode 原型:virtual int SetMapMode(int nMapMode ); 返回值:原映射模式。 参数说明:nMapMode是表2-1的模式代码。
2. 设置窗口范围函数



类属:CDC::SetWindowExt 原型:virtual CSize SetWindowExt ( int cx, int cy ); 返回值:原窗口范围的CSize对象。 参数说明:cx窗口x范围的逻辑坐标,cy 窗口y范围的逻辑坐标。
3. 设置视区范围函数
(4)选择一支库画笔函数
参数说明:参数nIndex是库笔代码 Windows系统中准备了一些使用频率较高的
画笔,不需要创建,可以直接选用。同样, 使用完库画笔时也不需要调用 DeleteObject()函数从内存中删除已使用 过的画笔。
三种常用库笔
库笔代码 BLACK_PEN 含义 宽度为1的黑笔实线笔
语句:COLORREF
c; 注释:变量c用于存放像素点的颜色值
语句:pDC->SetPixel(20,20,RGB(255,0,0));
注释:在屏幕的(20,20)坐标位置处,绘制
一个红色的像素点
语句:
c=pDC->GetPixel(20,20); 注释: c保存该像素点的颜色
逻辑坐标。坐标原点位置可以自由 0.001inch 设置,X轴向右,Y轴向上。
映射模式
模式代码 坐标单位 1/440inch或 1/20点
坐标系特征
逻辑坐标。坐标原点位置可 MM_TWIPS 以自由设置,X轴向右,Y 轴向上。 用户自定义, 逻辑坐标。坐标原点位置可 MM_ISOTROPIC X轴和Y轴比 以自由设置,X轴和Y轴方 例相等 向自定义。 用户自定义, 逻辑坐标。坐标原点位置可 MM_ANSIOTROPIC X轴和Y轴比 以自由设置,X轴和Y轴方 例独立设置 向自定义。


选择画刷函数
CBrush *SelectObject(CBrush *pBrush );


删除画刷函数
BOOL DeleteObject( );


创建阴影画刷函数

BOOL CreateHatchBrush(int nIndex,COLORREF crColor); 第一个参数nIndex是阴影样式代码 第二个参数crColor是阴影线的颜色
2. 获取像素颜色函数

类属:CDC::GetPixel 原型:COLORREF GetPixel(int x,int y)const; 返回值:指定像素的RGB值。 参数说明:得到指定像素的RGB颜色值
例4 在屏幕的(20,20)坐标位置处绘制一个红 色像素点。然后取出该像素点的颜色,在屏幕的 (60,20)坐标处绘制一个相同颜色的像素点。
VC++绘图简介
2.2.1
常用类
1.常用绘图类
常用绘图类
常用绘图类
CPoint类:存放点坐标(x,y)。 CRect类:存放矩形左上角顶点和右下角顶点
的坐标(top,left,right,bottom) Csize类:存放矩形的宽度和高度的坐标(cx, cy),其中cx为矩形的宽度,cy为矩形的高 度。
相关文档
最新文档