第5章 GDI+图形设备接口加

合集下载

c++第5章 图形绘制

c++第5章 图形绘制

第5章图形绘制在Visual C++6.0中,掌握图形程序设计方法是非常重要的。

因为图形在任何一个可视化工程项目中都是不可缺少的。

CDC(设备环境)类封装了图形绘制所需要的各种操作。

本章我们将通过实际例子和较详细的阐述,来了解和掌握如何使用设备环境类(CDC)及图形设备接口(GDI)进行图形绘制。

5.1 设备环境与设备环境类(CDC)5.1.1 设备环境设备环境也称设备上下文(Device Context,简称DC),是计算机物理设备的代表,也是图形设备接口的主要组成部分。

由于Windows是一个与设备无关的操作系统,即Windows不允许直接访问硬件,如果用户想将文本和图形绘制到显示器或其它设备中去,必须通过“设备环境”这个抽象层与硬件进行通信,设备上下文对象的作用就是实现Windows的设备无关性,任何向屏幕上进行输出的功能都要间接地通过它来完成。

设备上下文是Windows的一种数据结构,它包含了有关如显示器或打印机等设备的绘图属性信息。

所有绘画都是通过设备上下文对象来实现的,该对象封装了Windows的画线、图形和文本的API函数。

设备上下文允许在Windows下独立于设备的绘画。

设备上下文不仅能够被用来在屏幕上绘画,它也可以将绘画输出到打印机和图元文件中。

5.1.2 设备环境类设备环境类CDC直接继承于CObject类,该类定义了一类设备对象。

CDC对象提供了非常多的成员函数,与设备环境的显示器、打印机等一起工作。

例如,如果要在显示器等设备上绘制图形,我们可以用MFC提供的设备环境类CDC类,因为CDC类中包含了绘图所需要的所有成员函数。

同时。

MFC还提供了以下几个CDC的派生类:1、CPaintDC类此类比较特殊,它的构造函数和析构函数都是针对OnPaint进行的。

用户一旦获得相关的CDC指针,就可以将它当做任何设备环境(包括屏幕、打印机)指针来使用,CPaintDC类的构造函数会自动调用BeginPaint,而它的析构函数则会自动调用EndPaint。

图形设备接口及绘图

图形设备接口及绘图

§3.2 图形设备接口(GDI)
1. 图形设备接口—提供专门的数据结构即设备描述表(DC)和对DC操 作的绘图函数。
2. 设备描述表(DC)—用于代表图形输出设备如显示屏、打印机;
3. 设备无关性—利用GDI,所有的绘图操作都对设备描述表而不是具体 的物理设备。
设备描述表
• 一种专门用于代表图形输出设备(如屏幕、打 印机和绘图仪等)的数据结构 –画布 –绘图工具(设备描述表属性)
hNewPen=(HPEN)SelectObject(hdc,hOldPen); DeleteObject(hNewPen); EndPaint(hWnd, &ps); break;
使用CGDIObject类
• 数据成员m_hObject • Attach函数 Detach函数 • 派生类: CPen、CBrush、CFont、
– yViewport=(yWindowyWinOrg)*(yViewExt/yWinExt)&ewportOrgEx函数
BOOL SetViewportOrgEx( HDC hdc, // 设备描述表句柄 int X, // 使用设备单位,视口原点的X坐标值 int Y, // 使用设备单位,视口原点的Y坐标值 LPPOINT lpPoint // 指向POINT结构变量,存放 原始的视口原点坐标
PAINTSTRUCT • typedef struct tagPAINTSTRUCT {
HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved[32]; } PAINTSTRUCT
(2) EndPaint function

第5章 VC++图形和文本输出

第5章 VC++图形和文本输出

5.画多边形 CPoint poly[4];//画一个平行四边形 poly[0]=CPoint(0,0); poly[1]=CPoint(50,50); poly[2]=CPoint(50,100); poly[3]=CPoint(0,50); pDC->Polygon(poly,4);
6.画其它图形 CDC::Pie 画饼图 CDC::Chord 画弦 CDC::FillRect 用指定颜色填充矩形且不画 边线 CDC::Draw3DRect 用于绘制名种3D边框 CDC::RoundRect 画圆角矩形
// TODO: add draw code for native data here
pDC->TextOut(1,1,”hello world!”);
}
WM_PAINT消息
WM_PAINT消息是最重要的绘图消息, 它要求窗口重新绘制内容,产生 WM_PAINT消息的场合通常有: 窗口移动后及最大化,最小化后的刷新。 被覆盖区域的刷新,如下拉菜单覆盖的区 域。 无效区域产生后的刷新,如执行滚动条操 作,将一区域移动至不可见。
设备上下文类-CDC
CObject CDC CClientDC CMetaFileDC CPanitDC CWindowDC
设备上下文类-CDC
MFC封装了DC,提供CDC类及它的子类以 访问GDI。 各类操作如下: 1.CDC类 该类封装了所有图形输出函数,包含一个 DC的创建和初始化及通用GDI对象的操作, 其中包括画简单图形(如线、矩形、椭圆)和 进行复杂功能(区域、位图)
设置字体 (Set Font)
设置显示字体的风格需要创建一个CFont对 象,步骤如下: 1.定义CFont对象 2.调用CreateFont函数创建字体 3.将创建的字体对象选入DC,并保存前一 个被选入DC的字体对象 程序举例Exam4:在视图中创建并使用字体, 显示“倾斜的黑体”内容。

GDIGDI+使用到的相关函数介绍

GDIGDI+使用到的相关函数介绍

GDIGDI+使⽤到的相关函数介绍GDI,图像设备接⼝的简称。

⾸先介绍⼏个概念。

1、DC,设备上下⽂DeviceContext,也称为设备描述表。

它是⼀个关于如何绘制图形的⽅法集合,既可以绘制各种图形,也可以确定在应⽤窗⼝中绘制图形的⽅式,即绘图模式和映射模式。

Win32编程中使⽤HDC来标识。

DC类似于画布,我们想要绘制图形⾸先就需要获得DC。

常见获得DC的⽅法HDC hdc = ::GetDC(hwnd);::ReleaseDC(hwnd,hdc);此⽅法适合在窗⼝现有图形的基础上进⾏绘制。

(获得DC后⼀定要记得Release,否则会造成内存泄漏)PAINTSTRUCT ps;HDC hdc = ::BeginPaint(hWnd,&ps);::EndPaint(hWnd,&ps);BeginPaint函数就是将窗⼝上所有内容清除⼲净,然后在上⾯绘制。

参数ps可以指定更新的区域,⽽不必重绘制整个界⾯, BeginPaint和EndPaint总是被⽤来响应WM_PAINT 消息。

HDC hMemDC = ::CreateCompatibleDC(hDest);//其他绘图操作代码::BitBlt(hDest,x,y,w,h,hMemDC,0,0,SRCCOPY);//将hMemDC上绘制的图像数据拷贝到hDest上,界⾯此时才会显⽰::DeleteDC(hMemDC);通过调⽤CreateCompatibleDC函数来创建与⽬标DC兼容的内存DC,⼀般⽤于解决界⾯的闪烁问题。

2、常⽤的GDI对象画笔Pen:负责画线,画边框(矩形边框,圆边框,饼边框)都是采⽤画笔来操作的。

默认画笔是⿊⾊,宽度为1,样式为实线的画笔。

画刷Brush:负责填充矩形,填充圆、饼等以及刷窗⼝背景。

默认为⽩⾊画刷。

字体Font:负责基于具体字体对象的所有的⽂本绘制,默认字体是系统等宽字体,⽐如对话框标题。

图形设备接口及绘图

图形设备接口及绘图

设备驱动层负责与具体的图形设 备进行交互,将GDI核心层发送的 图形指令转换为设备可以理解的 指令,并控制设备进行渲染。
GDI的结构主要包括三个层次:应 用程序接口层、GD负责将应用程序的图形 操作转换为相应的图形指令,并 管理图形设备的资源,如内存、 颜色表等。
技术创新方向预测
跨平台兼容性增强
随着不同操作系统和设备的普及,图形设备接口将更加注重跨平 台兼容性,实现无缝的跨平台用户体验。
实时渲染技术优化
借助更强大的计算能力和先进的算法,图形设备接口将进一步提高 实时渲染的质量和效率。
AI驱动的智能图形处理
结合人工智能技术,图形设备接口将实现更智能的图形处理,包括 自动优化、智能缩放、场景识别等功能。
图形设备接口及绘图
目录
• 图形设备接口概述 • 图形设备接口原理及结构 • 绘图基本操作与功能 • 高级绘图技巧与方法 • 图形设备接口在应用领域中的实践 • 图形设备接口未来发展趋势与挑战
01 图形设备接口概述
定义与功能
定义
图形设备接口(Graphics Device Interface,GDI)是一种应用程序编 程接口(API),用于在计算机图形环 境中表示图形和文字。
标准
为了规范GDI的开发和使用,国际标准化组织(ISO) 和国际电工委员会(IEC)等制定了一系列相关标准, 如OpenGL、DirectX等。这些标准为不同平台和设 备上的GDI实现提供了统一的接口和规范,促进了 GDI的互操作性和可移植性。
02 图形设备接口原理及结构
工作原理简介
图形设备接口(GDI)是计算机图形学中的一个重要概念, 它提供了一种与图形硬件设备进行交互的抽象层。
图像处理
反走样技术

图形设备接口培训课件

图形设备接口培训课件

图形设备接口培训课件概述本课程旨在介绍图形设备接口(Graphics Device Interface,GDI)的基本概念、功能和使用方法。

GDI是一种用于在Microsoft Windows操作系统中绘制图形和文字的API。

通过学习本课程,您将了解GDI的基本原理、常用功能以及如何使用GDI在Windows应用程序中创建绘图和文字。

目录•GDI简介•GDI对象•绘制图形–直线和曲线–矩形和圆角矩形–椭圆和圆–多边形•绘制文字•图像操作•设备上下文•GDI+和Direct2DGDI简介GDI是Windows操作系统中的图形设备接口,它提供了一系列的函数和数据结构,用于在屏幕上绘制图像和文字。

GDI使用设备上下文(Device Context)来管理图形输出的相关信息,包括画笔、画刷、字体等。

在使用GDI之前,需要先创建一个设备上下文,并将其与屏幕或打印机连接起来。

GDI对象在GDI中,图形元素和属性都被封装为对象。

常用的GDI对象包括画笔、画刷、字体和位图等。

这些对象可以通过GDI的函数进行创建、设置属性和使用,也可以通过GDI的函数进行销毁。

绘制图形GDI提供了多种绘制图形的函数,可以绘制直线、曲线、矩形、椭圆、圆和多边形等图形。

绘制图形的过程通常包括选择绘图对象、设置绘制属性和调用相应的绘制函数。

直线和曲线GDI提供了MoveToEx和LineTo函数用于绘制直线。

MoveToEx函数用于设置直线的起始点,LineTo函数用于设置直线的终点并绘制直线。

GDI还提供了绘制曲线的函数,如Polyline、PolyBezier和PolyBezierTo等。

这些函数可以根据给定的点坐标绘制连接它们的曲线。

矩形和圆角矩形GDI提供了Rectangle函数用于绘制矩形。

这个函数接受矩形的左上角和右下角坐标作为参数,并在指定的区域内绘制一个矩形。

RoundRect函数可以绘制带有圆角的矩形。

这个函数除了接受矩形的左上角和右下角坐标外,还接受一个椭圆的宽度和高度作为参数,用于指定圆角的大小。

第5章C++ Windows绘图

第5章C++ Windows绘图

5.3.1 画笔的应用
创建画笔最简单的方法是调用CPen类的一个带参 数的构造函数来构造一个CPen类画笔对象,它可 以定义笔的虚实、颜色和笔宽。具体使用步骤如 下: (1)生成CPen类的对象。 (2)调用CPen类的函数CreatePen()创建一支新 画笔,CreatePen()函数的原型是:
5.4.1 与绘图相关的数据类型
2.CRect类和RECT结构 CRect类等同于RECT结构,它用top、left、bottom、 right成员来定义一个矩形区域,RECT的形式是: typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT;
5.1.2 图形刷新
3.刷新方法 常用的Windows应用程序刷新窗口的方法如下: 在内存中保持一个显示输出的副本,当需要重绘 窗口时,将副本拷贝到相应的窗口中。该方法适 用于刷新位图等复杂图形。 记录曾经发生的事件,在窗口需要刷新时重新调 用窗口执行这个事件。 重新绘制图形,一般对于简单图形常采用重新绘 制图形方法执行刷新。在应用程序中,将图形绘 制处理程序放在消息WM_PAINT的响应模块中, 一旦程序接收到刷新请求即可重绘图形。
5.3.2 画刷的应用
在MFC类库中,CBrush类封装了GDI的画刷工具。 在定义画刷对象时,要调用构造函数来创建默认的 画刷。使用画刷的主要步骤为: (1)生成CBrush类对象,并调用构造函数初始化画 1 CBrush 刷。 (2)用CDC类的SelectObject()函数,把新画刷选 入设备环境。 (3)使用完新画刷后,用CDC类的SelectObject() 函数恢复原有画刷。
5.1.1 基本概念

图形设备接口

图形设备接口

图形设备接口学前提示Windows中负责图形输出的是图形设备接口GDI(Graphic Device Interface)。

GDI通过将应用程序与不同的输出设备特性相隔离,使Windows应用程序能够无须修改即可在Windows支持的任何图形输出设备上运行,即具有设备无关性。

本章主要介绍图形设备接口的知识——设备描述表,坐标系统,映射模式,绘图函数和绘图工具知识要点设备上下文坐标的映射绘制基本图形创建画笔设备上下文类为了支持GDI绘图,MFC提供了两种重要的类设备上下文类,包括CDC及其派生类,用于设置绘图属性和绘制图形绘图对象类,封装了各种GDI绘图对象,包括画笔,画刷,字体,位图,调色板和区域等设备上下文类包括CDC类和它的派生类CClientDC,CPaintDC,CWindowDC ,CMetaFileDC。

表7.1 CDC 类的一些常用函数7.2 坐标的映射坐标的映射方式简单地讲就是坐标的安排方式,系统默认的映射模式为MM_TEXT,即X坐标向右增加,Y坐标向下增加,(0,0)在屏幕左上方,DC中的每一点就是屏幕上的一个象素,如图7.3所示。

如语句pDC->Rectangle(CRect(0,0,300,300))表示将绘制出一个矩形,这个矩形的左上角落在屏幕的左上方,长和宽均为300 个象素屏幕坐标X 坐标向右增加7.2.1 设置映射模式用户可以通过int CDC::SetMapMode( int nMapMode) 指定映射模式,映射模式从X轴和Y 轴的比例是否可变来说,可分为固定映射模式和可变比例映射模式两类(1)固定比例映射模式,其具体值如表7.2 所示上述几种映射默认的原点在屏幕左上方,(2)可变比例映射模式7.3 绘制基本图形CDC类在它的成员函数中封装了全部Windows 图形API ,这些成员函数包括—画点的函数,画线的函数,画形状的函数,填充和翻转形状的函数,滚动屏幕的函数,绘制文本的函数,绘制位图和图表的函数7.3.1 画点画点即在指定的坐标处按给定的颜色画出像素点,点的绘制不过是改变单个像素点的颜色。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章 GDI+GDI+(Graphics Device Interface Plus 图形设备接口加)是Windows XP 和Windows Server 2003操作系统的图形子系统,也是.NET 框架的重要组成部分和窗体绘图的主要工具,负责在屏幕和打印机上绘制图形图像和显示信息。

顾名思义,GDI+是Windows 早期版本所提供的图形设备接口GDI 的后续版本。

GDI+是一种应用程序编程接口(API),分别通过一套C++类和一套部署为托管代码的类来展现,这两套类分别被称为GDI+的“C++封装”和“托管类接口”。

GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows 图形图像程序开发的主要工具。

本章将介绍GDI+的特点和新增功能,以及GDI+ API 的具体使用方法,包括二维矢量图形的绘制、图像处理的应用、以及文字的显示等。

由于本章内容较多,有些章节不作为基本要求,用*号表示的章节是可选的。

5.1 概述GDI+与GDI 一样,都具有设备无关性。

而且GDI+是建立在GDI 之上的一种高层接口,供Windows 应用程序和.NET 框架调用。

参见下图:GDI+的体系结构本节首先介绍GDI+的几个主要新增的特性及其功能,然后说明它给Windows 图形图像程序的开发模式带来的变化,最后给出一个代码实例,介绍如何在VC++中使用GDI+进行程序开发。

1.GDI+的功能GDI+主要提供了以下三种功能:1)二维矢量图形与MFC中代表GDI的CDC和CGDIObject的诸派生类(CPen、CBrush、CFont等)类似,GDI+的Graphics等类也提供绘制各种二维矢量图形(如直线、折线、矩形、椭圆、多边形等)的功能。

而且GDI+还增加了许多新的特性和功能,如无当前状态的绘图模式、含透明成分(α混色)的颜色类Color、图案笔、颜色可渐变的刷、贝塞尔和样条曲线、持久的路径、可伸缩的区域、功能强大的矩阵和变换等等。

与MFC类似,用户也可以使用GDI+提供的Metafile、MetafileHeader和MetaHeader类在图元文件中记录图形和图像的命令序列。

2)图像处理与MFC类似,GDI+提供了Image、Bitmap和Metafile类,可用于显示、操作和保存位图。

它们支持众多的图像文件格式,还可以进行多种图像处理操作。

3)文字显示版式与MFC类似,GDI+也是使用各种字体、字号和样式来显示文本。

GDI +为这种复杂任务提供了大量的支持,包括字体族类FontFamily、字体类Font和字体集类FontCollection及其两个派生类——InstalledFontCollection(已安装字体集)和PrivateFontCollection(专用字体集)等。

GDI+中的新功能之一是提供了可增强字体清晰度的ClearType(清晰活字)文字处理技术,利用子像素来消除锯齿,可使文本在LCD 屏幕上呈现时显得比较平滑。

4)功能汇总GDI+的C++封装包含54个类、12个函数、6类(226个)图像常量、55种枚举和19种结构。

GDI+的托管类接口则包含大约60个类、50个枚举和8个结构。

这两种封装中的Graphics类都是GDI+的核心功能,它是实际绘制直线、曲线、图形、图像和文本的类。

通过这些类和接口可以实现:●使用笔绘制线条和形状●使用刷填充形状●使用图像、位图和图元文件●α混合线条和填充●字体和文本●构造并绘制曲线●用颜色渐变的梯度刷填充形状●构造并绘制轨迹●变换●图形容器●区域●重新着色读取元数据等非常丰富强大的功能。

2.GDI+新增特性1)渐变画刷渐变画刷(gradient brush梯度刷)通过提供用于填充图形、路径和区域的线性渐变画笔和路径渐变画笔,GDI+扩展了GDI 的功能。

渐变画笔还可用于绘制直线、曲线和路径。

线性渐变画笔可用于使用颜色来填充图形,画笔在图形中移动时,颜色会逐渐改变。

例如,假定通过指定图形左边为蓝色、右边为绿色,创建了一个水平渐变画笔。

当用水平渐变画笔填充该图形时,随着画笔从图形的左边移至右边,颜色就会由蓝色逐渐变为绿色。

用类似方法定义的垂直渐变画笔填充的图形,颜色从上到下变化。

图6-1显示了用水平渐变画笔填充的椭圆和用斜式渐变画笔填充的区域。

图6-1 水平和斜式渐变画笔用路径渐变画笔填充图形时,可选择不同的方法来指定当从图形的一部分至另一部分移动画笔时颜色的变化方式。

一种选择是指定中心颜色和边缘颜色,在从图形中间向外边缘移动画笔时,像素逐渐从一种颜色变化到另一种颜色。

图6-2显示了用路径渐变画笔填充的路径(该路径是用一对贝塞尔样条创建的)。

图6-2 路径渐变画笔2)基数样条函数GDI+支持在GDI 中不支持的基数样条(cardinal spines)。

基数样条是一连串单独的曲线,这些曲线连接起来形成一条较长的光滑曲线。

样条由点的数组指定,并通过该数组中的每一个点。

基数样条平滑地(没有锐角)通过数组中的每一个点,因此,比通过连接直线创建的路径更光滑精准。

图6-3显示了两个路径:一个以基数样条的形式创建;另一个通过连接直线创建。

图6-3 基数样条路径和折线路径3)持久路径对象在GDI 中,路径属于设备上下文,并且会在绘制时被毁坏。

利用GDI +,绘图由Graphics 对象执行,可以创建并维护几个与Graphics对象分开的持久的路径对象(persistent path object)——GraphicsPath对象。

绘图操作不会破坏GraphicsPath 对象,因此可以多次使用同一个GraphicsPath 对象来绘制路径。

4)变换和矩阵对象GDI+提供了Matrix(矩阵)对象,它是一种可以使(缩放、旋转和平移等)变换(transformation)简易灵活的强大工具。

矩阵对象一般与变换对象联合使用。

例如,GraphicsPath 对象具有Transform 方法,此方法接收Matrix 对象作为参数。

单一的3×3矩阵可存储一种变换或一个变换序列。

图6-4显示了一个路径在执行两种变换前后的情况。

图6-4 路径的变换5)可伸缩区域GDI+ 通过对可伸缩区域(Scalable Regions)的支持极大地扩展了GDI。

在GDI 中,区域被存储在设备坐标中,而且,可应用于区域的惟一变换是平移。

而GDI+在全局坐标中存储区域,并且允许区域发生任何可存储在变换矩阵中的变换(如缩放和旋转)。

图6-5显示一个区域在执行三种变换(缩放、旋转和平移)前后的情况。

图6-5 区域的三种变换(缩放、旋转和平移)6)α混色在图6-5中,可以在变换区域(用蓝色阴影画笔填充)中看到未变换区域(用红色填充)。

这是由GDI+支持的α混色(Alpha Blending,透明混合)实现的。

使用α混色,可以指定填充颜色的透明度。

透明色与背景色相混合———填充色越透明,透出的背景色就越多。

图6-6显示四个用相同颜色(红色)填充、但透明层次不同的椭圆。

图6-6 不同透明度7)丰富的图像格式支持GDI+提供Image、Bitmap 和Metafile 类,可以用不同的格式加载、保存和操作图像。

GDI+支持BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF共9种常见的图像格式。

这些已经被ATL/MFC中的基于GDI+的CImage类所体现。

8)GDI+的不足虽然,相对于GDI来说,GDI+ 确实增加了许多新特性,而且功能更强大,使用也更方便。

但是,这并不等于GDI+ 就能够完全代替GDI。

因为GDI+实际上是GDI的封装和扩展,GDI+的执行效率一般要低于GDI的。

另外,GDI+不支持图的位运算,那么就不能进行异或绘图等操作。

而且在Visual C++中,GDI+还不支持双缓存机制(如内存DC和显示DC),这将大大影响GDI+ 在高速图形、图像、动画和视频等方面的应用。

3.编程模式的改变GDI+的出现,也使基于GDI的编程模式产生了很大变化:GDI+用一个“无状态模式”,取代了GDI中(需要先将各种工具和项目选入DC对象后,才能进行绘图的)“状态模式”。

主要体现在以下几个方面:1)DC句柄和图形对象设备上下文(DC = Device Context)是GDI中使用的一种结构,用于存储与特定显示设备的功能、以及指定如何在该设备上绘制项目之属性相关的信息。

用于屏幕显示的DC还与特定窗口相关联。

为了使用GDI API进行绘图,必须首先获得一个DC的句柄(HDC = Handle to a DC),然后将该句柄作为参数,传递给实际进行绘图的GDI 函数。

还可以将此句柄作为参数,传递给获取和设置DC属性的GDI 函数。

使用GDI+,不需要再(直接)使用句柄或设备上下文,而是只需(通过HDC)创建一个Graphics对象,然后用熟悉的面向对象方式来调用其中的各种绘图方法,例如:myGraphicsObject.DrawLine(&pen, x1, y1, x2, y2);正如DC是GDI 的核心,Graphics对象也位于GDI+的核心。

DC和Graphics对象的作用相似,但在使用设备上下文(GDI)的基于句柄的编程模式和使用Graphics对象(GDI+)的面向对象的编程模型之间,存在一些基本的差异。

Graphics对象(像DC一样)与屏幕上的特定窗口关联,并具有指定如何绘制项目的属性(如SmoothingMode和TextRenderingHint)。

但是,Graphics对象不受笔、刷、路径、图像或字体的约束,这与设备上下文不同。

例如,使用设备上下文绘制线条之前,必须先调用SelectObject 以使笔对象和DC关联,即将笔选入DC中。

在设备上下文中绘制的所有线条均使用该笔,直到选择另一支不同的笔为止。

在GDI+中,将Pen 对象作为参数传递给Graphics类的DrawLine 方法。

可以在一系列的DrawLine调用的每个调用中,使用不同的Pen对象,而不必将给定的Pen对象与Graphics对象关联。

2)绘制线条的两种方法下面每个示例都从点(20, 10)到点(200, 100)绘制一条宽为3的红色线条。

第一个示例调用GDI,第二个示例则通过托管类接口调用GDI+,这里都使用MFC。

也可以不使用MFC,而直接用API来进行GDI+ 绘图(由于篇幅有限,这里就不介绍了)。

(1)用GDI 画线利用MFC进行GDI绘图,步骤与API的差不多,只是MFC将各种GDI功能封装到了不同的类中。

例如,笔的类为CPen、点的类为CPoint、设备上下文的类为CDC。

相关文档
最新文档