Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16498120
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:58:58

下载本文示例代码
  摘要 介绍了GDI 对几何线条创建、应用等基本方法,并以实例的方式对其中难于理解的部分提供了示例代码,实现了原先GDI不易实现的功能,并为进一步利用GDI 进行更复杂的图形处理奠定了良好的基础。  关键词 GDI ;几何线条  引言  GDI 是原Windows GDI的扩展,增加了新功能并对原功能模块进行了优化,使编程人员更易实现多种高级功能。因GDI 的强大功能及其完美的性能,微软倡导新应用程序的开发基于GDI 进行。  所谓路径,是指可以被填充的、画出轮廓或同时被画出轮廓并填充的一个或多个图形。路径的引入,大大地丰富了Windows的图形功能,使得应用程序可以方便地建立复杂区域,绘制和填充不规则图形。  路径一般由以下元素组成:直线、矩形、椭圆、圆弧、多边形、三次样条和贝塞尔曲线。在GDI 中,几何线条的处理主要是通过调用图形路径(GraphicsPath)的方法来实现的。使用GraphicsPath对象可以将这些元素收集到一个单元中。以后只需调用Graphics类的DrawPath方法,就可以一次绘制出该对象收集的全部元素序列。  编程方法与实例  1、准备工作  使用GDI 编程,必须包含gdiplus.h头文件,要使用Gdiplus名称空间,连接时需要Gdiplus.lib。使用GDI 绘制对象时需要获取一个设备描述表句柄,把它作为参数传递给Graphics的构造函数,这样就可以使用Graphics对象的库函数了。  使用GDI 编程必须在创建GDI 对象前执行GdiplusStartup实现初始化,在程序结束时调用GdiplusShutdown关闭GDI 功能,清理占用的资源。两组函数要成对调用。  示例代码如下所示: //---------------------------在stdafx.h文件中-----------------------------------//#include "Gdiplus.h"using namespace Gdiplus ;#pragma comment (lib, "Gdiplus.lib")//----------------------在应用程序类的InitInstance函数中-----------------------//GdiplusStartupInput gdiplusStartupInput ;GdiplusStartup (&m_GdiplusToken, &gdiplusStartupInput, NULL) ;//-----------------------在应用程序类的ExitInstance函数中---------------------//GdiplusShutdown (m_GdiplusToken) ;  注:其中变量m_GdiplusToken应该是ULONG_PTR类型的全局变量,或者是应用程序类的成员变量  2、路径的创建  GraphicsPath类提供了许多创建路径元素的接口:AddArc(圆弧)、AddBezier(贝塞尔曲线)、AddBeziers(贝塞尔曲线序列)、AddClosedCurve(闭合的基数样条曲线)、AddCurve(基数样条曲线)、AddEllipse(椭圆)、AddLine(直线段)、AddLines(直线段序列)、AddPie(扇形)、AddPolygon(多边形)、AddRectangle(矩形)、AddRectangles(矩形序列)和AddString(字符串轮廓路径)。 图1 MSDN中提供的路径的例子  3、子路径的添加和提取  GraphicsPath还可以包含多个图形,其中每一个图形被称为子路径(figures)。如果在GraphicsPath对象中使用了StartFigure或CloseFigure函数,在这两个之后对路径所添加的线条都将构成一个的子路径。[5]这两个函数的区别是,StartFigure方法不闭合当前图形即开始一个新图形,而CloseFigure方法闭合当前图形并开始新的图形。   下面两段示例代码在路径中添加了两个条路径,前一条子路径由两条直线段组成,后一条子路径是一个圆形。两段代码不同的地方仅仅在于StartFigure和CloseFigure函数的使用,因而它们的效果也不相同,如图2和图3所示。 //示例代码1----使用StartFigureGraphicsPath path;path.AddLine(100,100,100,150);path.AddLine(100,150,150,150);path.StartFigure();path.AddEllipse(75,75,50,50);Graphics g(hdc);g.DrawPath(&Pen(Color::Black,1),&path);//示例代码2----使用CloseFigureGraphicsPath path;path.AddLine(100,100,100,150);path.AddLine(100,150,150,150);path.CloseFigure();path.AddEllipse(75,75,50,50);Graphics g(hdc);g.DrawPath(&Pen(Color::Black,1),&path); 图2 StartFigure效果图3 CloseFigure效果  GDI 的GraphicsPathIterator类完成了对路径的一个或多个子路径的描述、管理、测试等功能。GraphicsPathIterator能够从给定的路径中进行多种与子路径相关的操作。  表1 GraphicsPathIterator类常用成员函数 常用成员函数 功能描述 HasCurve 指示与此GraphicsPathIterator对象关联的路径是否包含曲线 NextSubpath 将此子路径移到指定的GraphicsPath对象中的下一子路径 Rewind 将此GraphicsPathIterator对象重绕到其关联路径的起始处 GetSubpathCount 获取路径中子路径的数目共2页。 1 2 :   摘要 介绍了GDI 对几何线条创建、应用等基本方法,并以实例的方式对其中难于理解的部分提供了示例代码,实现了原先GDI不易实现的功能,并为进一步利用GDI 进行更复杂的图形处理奠定了良好的基础。  关键词 GDI ;几何线条  引言  GDI 是原Windows GDI的扩展,增加了新功能并对原功能模块进行了优化,使编程人员更易实现多种高级功能。因GDI 的强大功能及其完美的性能,微软倡导新应用程序的开发基于GDI 进行。  所谓路径,是指可以被填充的、画出轮廓或同时被画出轮廓并填充的一个或多个图形。路径的引入,大大地丰富了Windows的图形功能,使得应用程序可以方便地建立复杂区域,绘制和填充不规则图形。  路径一般由以下元素组成:直线、矩形、椭圆、圆弧、多边形、三次样条和贝塞尔曲线。在GDI 中,几何线条的处理主要是通过调用图形路径(GraphicsPath)的方法来实现的。使用GraphicsPath对象可以将这些元素收集到一个单元中。以后只需调用Graphics类的DrawPath方法,就可以一次绘制出该对象收集的全部元素序列。  编程方法与实例  1、准备工作  使用GDI 编程,必须包含gdiplus.h头文件,要使用Gdiplus名称空间,连接时需要Gdiplus.lib。使用GDI 绘制对象时需要获取一个设备描述表句柄,把它作为参数传递给Graphics的构造函数,这样就可以使用Graphics对象的库函数了。  使用GDI 编程必须在创建GDI 对象前执行GdiplusStartup实现初始化,在程序结束时调用GdiplusShutdown关闭GDI 功能,清理占用的资源。两组函数要成对调用。  示例代码如下所示: //---------------------------在stdafx.h文件中-----------------------------------//#include "Gdiplus.h"using namespace Gdiplus ;#pragma comment (lib, "Gdiplus.lib")//----------------------在应用程序类的InitInstance函数中-----------------------//GdiplusStartupInput gdiplusStartupInput ;GdiplusStartup (&m_GdiplusToken, &gdiplusStartupInput, NULL) ;//-----------------------在应用程序类的ExitInstance函数中---------------------//GdiplusShutdown (m_GdiplusToken) ;  注:其中变量m_GdiplusToken应该是ULONG_PTR类型的全局变量,或者是应用程序类的成员变量  2、路径的创建  GraphicsPath类提供了许多创建路径元素的接口:AddArc(圆弧)、AddBezier(贝塞尔曲线)、AddBeziers(贝塞尔曲线序列)、AddClosedCurve(闭合的基数样条曲线)、AddCurve(基数样条曲线)、AddEllipse(椭圆)、AddLine(直线段)、AddLines(直线段序列)、AddPie(扇形)、AddPolygon(多边形)、AddRectangle(矩形)、AddRectangles(矩形序列)和AddString(字符串轮廓路径)。 图1 MSDN中提供的路径的例子  3、子路径的添加和提取  GraphicsPath还可以包含多个图形,其中每一个图形被称为子路径(figures)。如果在GraphicsPath对象中使用了StartFigure或CloseFigure函数,在这两个之后对路径所添加的线条都将构成一个的子路径。[5]这两个函数的区别是,StartFigure方法不闭合当前图形即开始一个新图形,而CloseFigure方法闭合当前图形并开始新的图形。   下面两段示例代码在路径中添加了两个条路径,前一条子路径由两条直线段组成,后一条子路径是一个圆形。两段代码不同的地方仅仅在于StartFigure和CloseFigure函数的使用,因而它们的效果也不相同,如图2和图3所示。 //示例代码1----使用StartFigureGraphicsPath path;path.AddLine(100,100,100,150);path.AddLine(100,150,150,150);path.StartFigure();path.AddEllipse(75,75,50,50);Graphics g(hdc);g.DrawPath(&Pen(Color::Black,1),&path);//示例代码2----使用CloseFigureGraphicsPath path;path.AddLine(100,100,100,150);path.AddLine(100,150,150,150);path.CloseFigure();path.AddEllipse(75,75,50,50);Graphics g(hdc);g.DrawPath(&Pen(Color::Black,1),&path); 图2 StartFigure效果图3 CloseFigure效果  GDI 的GraphicsPathIterator类完成了对路径的一个或多个子路径的描述、管理、测试等功能。GraphicsPathIterator能够从给定的路径中进行多种与子路径相关的操作。  表1 GraphicsPathIterator类常用成员函数 常用成员函数 功能描述 HasCurve 指示与此GraphicsPathIterator对象关联的路径是否包含曲线 NextSubpath 将此子路径移到指定的GraphicsPath对象中的下一子路径 Rewind 将此GraphicsPathIterator对象重绕到其关联路径的起始处 GetSubpathCount 获取路径中子路径的数目共2页。 1 2 : 下载本文示例代码


基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理基于Windows GDI 的几何线条处理
阅读(157) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~