Visual C++.NET GDI+编程根底C语言教程-C / C++-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝29
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:208回复:0

  Visual C++.NET GDI+编程根底C语言教程

楼主#
更多 发布于:2016-05-30 22:07

GDI+供给从简略到杂乱图形制作的大量办法,而且咱们能够经过对途径和区域的操作结构出更杂乱的图形,这在CAD等场合极为有用。当然,在绘图之前咱们有必要搞清一些基本内容,如坐标空间、画笔和画刷等。

坐标空间及其改换

在视图和窗口中绘图或定位总是在一个二维坐标系进行,依据效果办法的不一样,坐标有多种表明办法,而且各种不一样坐标之间能够彼此改换。

1. 国际坐标系、设备坐标系和页面坐标系

GDI+为咱们供给了三种坐标空间:国际坐标系、页面坐标系和设备坐标系。

国际坐标系是运用程序用来进行图形输入输出所运用的一种与设备无关的笛卡尔坐标系。一般,咱们能够依据自个的需要和便利界说一个自个的国际坐标系,这个坐标系称为用户坐标系。例如,前面DrawLine(&newPen,

        20, 10, 200, 100);中的坐标都是以这个用户坐标系为基准的,默许时运用像素为单位。

设备坐标系是指显现设备或打印设备坐标系下的坐标,它的特点是以设备上的象素点为单位。关于窗口中的视图而言,设备坐标的原点在客户区的左上角,x坐标从左向右递加,y坐标自上而下递加。因为设备的分辨率不一样,一样坐标值的物理方位也许不一样。如关于边长为100的正方形,当显现器为640

        x 480和800 x 600时的巨细是不一样的。

页面坐标系是指某种映射模式下的一种坐标系。所谓映射是指将国际坐标系经过某种办法进行的改换。默许时,设备坐标和页面坐标是共同的。

2. 坐标映射和坐标原点的设置

为了能确保打印或显现的成果不受设备的影响,GDI+界说了一些映射办法和特点来决定设备坐标和页面坐标之间的联系。这些映射办法和特点有:

SetPageUnit和GetPageUnit

这两个特点函数是用来设置和获取每个单位所对应的实践衡量单位。它一般能够有下列的值:

UnitDisplay -- 每个页面单位为1/75英寸;

UnitPixel -- 每个页面单位为1个像素,此刻页面坐标与设备坐标一样;

UnitPoint -- 每个页面单位为1/72英寸;

UnitInch -- 每个页面单位为1英寸;

UnitDocument -- 每个页面单位为1/300英寸;

UnitMillimeter-- 每个页面单位为1毫米。

例如,或将Ex_GDIPlusDlg示例中的绘图代码修改成:

CPaintDC dc(this);

using namespace Gdiplus;

Graphics graphics( dc.m_hDC );

graphics.SetPageUnit(UnitMillimeter);

Pen newPen( Color( 255, 0, 0 ), 3 );

HatchBrush newBrush( HatchStyleCross,

Color(255, 0, 255, 0),

Color(255, 0, 0, 255));

graphics.DrawRectangle( &newPen, 50, 50, 100,

60);

graphics.FillRectangle( &newBrush, 50, 50,

100, 60);

则笔画宽度为3,以及矩形的左上角极点坐标和巨细单位都为毫米,其成果如图所示。

SetPageScale和GetPageScale

GDI+的这两个特点函数分别用来设置和获取页面的缩放份额。例如,当上面的绘图代码成为:

...

graphics.SetPageUnit(UnitMillimeter);

graphics.SetPageScale( (REAL)0.1);

Pen newPen( Color( 255, 0, 0 ), 3 );

...

代码中,REAL是一个浮点类型的界说。上述代码的成果如图2所示。

图2

TranslateTransform

GDI+的TranslateTransform办法用来改动坐标的原点方位,例如TranslateTransform(100,

50)是将坐标原点移到点(100,50)。

画笔

画笔是用来制作各种直线和曲线的一种图形东西,GDI+的Pen类为画笔供给了丰厚的办法。一般来说,咱们能够经过其结构函数来指定画笔的色彩和宽度,其界说如下:

Pen( const Color& color, REAL width );

其间,color是用来指定画笔色彩,width用来指定画笔宽度。REAL是一个float类型界说,而Color是GDI+的一个色彩类,它既能够指定一个ARGB色彩类型,也能够运用GDI+预界说的色彩值,甚至能够将COLORREF改换成Color类型的色彩。例如,下面的代码都是创立一个宽度为3,色彩为蓝色的画笔:

Pen newPen( Color( 255, 0, 0, 255 ), 3 );

Pen newPen(Color( 0, 0, 255), 3);

// 当Color只有三个实参时,色彩Alpha分量值为255。

Pen newPen(Color::Blue, 3);

COLORREF crRef = RGB( 0, 0, 255);

Color color;

color.SetFromCOLORREF(crRef);

Pen newPen(color, 3);

除了色彩外,GDI+的Pen类还供给SetDashStyle和SetDashPattern办法来设置画笔的预界说个性和自界说类型。其间,预界说个性能够有:DashStyleSolid(实线)、DashStyleDash(虚线)、DashStyleDot(点线)、DashStyleDashDot(点划线)、DashStyleDashDotDot(双点划线)和DashStyleCustom(自界说类型)。例如下列代码,其成果如图7.6所示:

using namespace Gdiplus;

Graphics graphics( pDC->m_hDC );

Pen pen(Color(255, 0, 0, 255), 15);

pen.SetDashStyle(DashStyleDash);

graphics.DrawLine(&pen, 0, 50, 400, 150);

pen.SetDashStyle(DashStyleDot);

graphics.DrawLine(&pen, 0, 80, 400, 180);

pen.SetDashStyle(DashStyleDashDot);

graphics.DrawLine(&pen, 0, 110, 400, 210);

可是,在工程运用中,预界说个性的画笔有时并不能满足实践的需要,而有必要自个界说一些线型,这需要经过SetDashPattern函数来完成。SetDashPattern的原型如下:

Status SetDashPattern( const REAL* dashArray,    

            INT count);

其间,dashArray是一个包含短划和距离长度的数组,count表明数组的巨细。留意,dashArray中的短划长度和距离长度是成对呈现的,例如下列代码是运用自界说类型的画笔,其成果如图7.7所示。

REAL dashVals[4] = {

2, // 短划长为2

2, // 距离为2

15, // 短划长为15

2}; // 距离为2

Pen pen(Color(255, 0, 0, 0), 5);

pen.SetDashPattern(dashVals, 4);

graphics.DrawLine(&pen, 5, 20, 405, 200);

需要说明的是,GDI+的Pen类还供给SetStartCap和SetEndCap办法来设置一条直线的开始端和终止端的样式。例如下面的代码,其成果如图7.8所示。

using namespace Gdiplus;

Graphics graphics( pDC->m_hDC );

Pen pen( Color( 255, 0, 0, 255 ), 15);

pen.Se

优质IT资源分享社区为你提供此文。

本站有大量优质C、C++教程视频,资料等资源,包含C,C++基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

C、C++教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客