,VC   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,VC
您的位置:Yesky > 软件 > 开发者网络 > 正文
基于Windows GDI+的几何线条处理
[文章信息]
作者:徐歆恺 梁博 葛庆平
时间:2005-05-20
出处:计算几与信息技术
责任编辑:方舟
[文章导读]
介绍了GDI+对几何线条创建、应用等基本方法,并以实例的方式对其中难于理解的部分提供了示例代码
advertisement
热点推荐
· 图文详解:黑客入侵方式演示
· Java异常处理的陋习展播
· 多媒体系列教程:网页设计制作
· Powerpoint动画演示教程连载
· 光盘刻录手册:禁忌与技巧(下)
[正文]

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----使用StartFigure
GraphicsPath 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----使用CloseFigure
GraphicsPath 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 获取路径中子路径的数目


1 2  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
,VC相关内容,VC焦点新闻
  • Visual C++中动态链接库技术浅谈
  • VC编程技巧:IE控件的高级用法
  • 碎片图像无缝拼合技术的VC++实现
  • 使用Visual C++编程取得CPU信息
  • Visual C++中为普通程序添加ODBC应用
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,VCAdvertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价