科技时代新浪首页 > 科技时代 > 学园 > 正文

Windows GDI和GDI+编程实例全剖析(4)


http://www.sina.com.cn 2005年11月11日 10:06 天极yesky

    持久的路径对象

  在GDI中,路径隶属于一个设备上下文,一旦设备环境指针超过它的生存期,路径也会被删除。利用GDI+,可以创建并维护与Graphics对象分开的GraphicsPath 对象,它不依赖于Graphics对象的生存期。

  变形和矩阵对象

  GDI+提供了Matrix对象,它是一种可以使变形(旋转、平移、缩放等) 简易灵活的强大工具,Matrix对象需与要被变形的对象联合使用。对于GraphicsPath类,我们可以使用其成员函数Transform接收Matrix参数用于变形。

void CGdiexampleDlg::OnTransformationMatrix()
{
 // TODO: Add your command handler code here
 CClientDC dc(this);
 //创建Graphics对象
 Graphics graphics(dc);
 GraphicsPath path;
 path.AddRectangle(Rect(250, 20, 70, 70));
 graphics.DrawPath(&Pen(Color::Black, 1), &path); // 在应用变形矩阵之前绘制矩形
 // 路径变形
 Matrix matrix1, matrix2;

 matrix1.Rotate(45.0f); //旋转顺时针45度
 path.Transform(&matrix1); //应用变形
 graphics.DrawPath(&Pen(Color::Red, 3), &path);

 matrix2.Scale(1.0f, 0.5f); //转化成为平行四边形法则
 path.Transform(&matrix2); //应用变形
 graphics.DrawPath(&Pen(Color::Blue, 3), &path);
}

  图5演示了正方形经过旋转和拉伸之后的效果:黑色的为原始图形,红色的为旋转45度之后的图形,蓝色的为经过拉伸为平行四边形后的图形。

WindowsGDI和GDI+编程实例全剖析(4)
图5 GDI+变形和矩阵对象

  可伸缩区域

  GDI+通过对区域(Region)的支持极大地扩展了GDI。在GDI 中,区域存储在设备坐标中,可应用于区域的唯一变形是平移。但是在GDI +中,区域存储在全局坐标(世界坐标)中,可对区域利用变形矩阵进行变形(旋转、平移、缩放等)。

void CGdiexampleDlg::OnScalableRegion()
{
 // TODO: Add your command handler code here
 CClientDC dc(this);
 //创建Graphics对象
 Graphics graphics(dc);
 //创建GraphicsPath
 GraphicsPath path;
 path.AddLine(100, 100, 150, 150);
 path.AddLine(50, 150, 150, 150);
 path.AddLine(50, 150, 100, 100);
 //创建Region
 Region region(&path);
 //填充区域
 graphics.FillRegion(&SolidBrush(Color::Blue), &region);
 //区域变形
 Matrix matrix;
 matrix.Rotate(10.0f); //旋转顺时针20度
 matrix.Scale(1.0f, 0.3f); //拉伸
 region.Transform(&matrix); //应用变形
 //填充变形后的区域
 graphics.FillRegion(&SolidBrush(Color::Green), &region);
}

  上述程序中以蓝色填充一个三角形区域,接着将此区域旋转和拉伸,再次显示,其效果如图6。

WindowsGDI和GDI+编程实例全剖析(4)
图6 GDI+区域变形

[上一页] [1] [2] [3] [4] [5] [6] [7] [下一页]

发表评论

爱问(iAsk.com)



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2005 SINA Inc. All Rights Reserved

版权所有 新浪网