【转】VB6 GDI+ 入门教程(3)——笔、刷子、矩形、椭圆绘制

27 篇文章 3 订阅
18 篇文章 1 订阅

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://vistaswx.blogbus.com/logs/37207407.html


 

好,我们已经学会如何画线了,那么后面的事情只要变通下都可以解决。不过变通前我还是得说几个基本的东西。

1.绘制,填充一个矩形

绘制一个整型长度的矩形,我们要用到GdipDrawRectangleI和GdipFillRectangleI。前者用pen画一个轮廓边框,后者用brush刷出一个填充区域。当然接下来就是如何创建刷子的问题了。GDI+中有多种刷子,有纯色刷子(创建:GdipCreateSolidFill),有渐变刷子(创建:GdipCreateLineBrush),还有纹理刷子,贴图刷子,路径刷子等等…………它们用于不同的方面。

(1)绘制一个矩形边框

首先,我们需要一个pen。

第一步,Dim!当然,我这样写了:Dim pen As Long;

第二步,创建一个红色的pen(线的粗细是1px):GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen。

pen创好了,接下来画矩形。这里我们用GdipDrawRectangleI来画矩形。画矩形跟画线可不一样,虽然指定坐标的都是4个参数,但是矩形里面四个参数分别是:X,Y,长,宽。OK,综合一下,代码如下:

Option Explicit

Dim graphics As Long
Dim pen As Long

Private Sub Form_Load() 
    InitGDIPlus 
    GdipCreateFromHDC Me.hDC, graphics  
    GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen 
    GdipDrawRectangleI graphics, pen, 30, 30, 100, 100 
End Sub

Private Sub Form_Unload(Cancel As Integer) 
    GdipDeletePen pen 
    GdipDeleteGraphics graphics '释放graphics占用的内存 
     TerminateGDIPlus 
End Sub
 

 

Photobucket

 

现在我们就绘制了一个100*100的红色矩形边框。很简单吧,变通就是这样的。

(2)创建纯色刷子

任何刷子包括其它的GDI+元素基本上都是一个思路:我们首先要Dim一个long型变量储存刷子/其它元素的地址,然后再调用GDI+相关函数去创建出指定刷子/其它元素。现在来创建一个蓝色,透明度为&HAA的刷子,那么代码就是这样:

Dim brush As Long
GdipCreateSolidFill &HAA0000FF, brush


刷子就这样拿到了。当然不要忘记扫地工作:GdipDeleteBrush brush。

(3)用刷子填充一个矩形

很明显,函数里面找一下就会发现我们要的函数:GdipFillRectangleI。它与DrawRectangleI很类似,只不过把pen变成了brush,因为现在要刷上去嘛- -。这一步也是很好变通的。把前面的一翻整理之后我们得到了一个绘制矩形并填充(不如说先填充再画边框,至于原因你可以自己颠倒一下顺序看下结果)的代码(注意 填充色是有透明度的):

Option Explicit

Dim graphics As Long
Dim pen As Long, brush As Long     

Private Sub Form_Load() 
    InitGDIPlus       
    GdipCreateFromHDC Me.hDC, graphics 
    GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen 
    GdipCreateSolidFill &HAA0000FF, brush       
    GdipFillRectangleI graphics, brush, 30, 30, 100, 100 
    GdipDrawRectangleI graphics, pen, 30, 30, 100, 100 
End Sub

  

Private Sub Form_Unload(Cancel As Integer) 
    GdipDeletePen pen 
    GdipDeleteBrush brush 
    GdipDeleteGraphics graphics '释放graphics占用的内存 
    TerminateGDIPlus 
End Sub


 

Photobucket

 

一样很简单吧!GDI+就是那么简单,只要懂了它的“工作机制”~!

(4)渐变刷子

渐变色很Cool,纯VB代码却要很多,还好,GDI+有一个方便的渐变刷子函数——GdipCreateLineBrush。看参数,发现不一样:

Function GdipCreateLineBrush(Point1 As POINTF, Point2 As POINTF, Color1 As Long, Color2 As Long, WrapMode As WrapMode, LineGradient As Long) As GpStatus


虽然复杂。。不过又很容易理解:Point1是一个PointF结构,它储存了坐标的X,Y,代表起始位置——这是渐变的起始、中止位置。一般情况下我们的起始中止位置是和绘制的图形一致的。Point2一样,代表了终点。渐变就在这两个点中“展开”。注意,现在是坐标点,而不是长宽值。Color1自然就是起始颜色,Color2则是第二颜色。WrapMode就是填充方向,最后一个参数自然就是传回建立好的brush。

于是我们又开始写程序了,这次是创建一个蓝色->红色,纵向的刷子。绘制图形免去,如果想看效果请自己添加drawrectangle(如果还要使用point画矩形请注意啦,rectangle里面 后面参数是接受长宽,而刷子里面接受的是点……知道区别和解决方法了么?减呗!)。

 
Dim brush As Long
Dim p1 As POINTF, p2 As POINTF 

p1.X = 0 
p1.Y = 0 
p2.X = 0 
p2.Y = 100 
GdipCreateLineBrush p1, p2, &HFF0000FF, &HFFFF0000, WrapModeTileFlipy, brush
 
 
2.绘制椭圆椭圆,想想也不会跟rectangle画法相差到哪里去。事实的确如此。下面就是一个绘制渐变椭圆的代码,解释免了吧,应该是很容易理解的。
 
Option Explicit
Dim graphics As Long
Dim brush As Long

Private Sub Form_Load() 
    InitGDIPlus 
    GdipCreateFromHDC Me.hDC, graphics 

    Dim p1 As POINTF, p2 As POINTF 

    p1.X = 10 
    p1.Y = 10 
    p2.X = 100 
    p2.Y = 50 

    GdipCreateLineBrush p1, p2, &H8AFF00FF, &HFFFF0000, WrapModeTileFlipXY, brush  
    GdipFillEllipseI graphics, brush, p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.X '注意:类似的,绘制椭圆边框的语句是GdipDrawEllipseI 
End Sub

Private Sub Form_Unload(Cancel As Integer) 
    GdipDeleteBrush brush 
    GdipDeleteGraphics graphics '释放graphics占用的内存 
    TerminateGDIPlus 
End Sub

 Photobucket

3.反锯齿功能

不知你有没有发现,画出来的椭圆是很不圆滑的(虽然用VB自己绘制也是如此)。如此强大的GDI+怎么可能没有圆滑的功能呢?有!函数是GdipSetSmoothingMode。我们需要把它加在绘制内容之前。一般我们把它加在创建好graphics之后(注意:它是作用于graphics的,因此请不要还没初始化graphics就设置graphics的光滑属性- -)。经过一翻调整,我们得出了一个设置圆滑的语句:

GdipSetSmoothingMode graphics,SmoothingModeAntiAlias

模式自然要设置成AntiAlias,AntiAlias顾名思义就是反锯齿(消除锯齿)。现在我们把这句话加到前面的椭圆程序中去,运行,如何,
椭圆很光滑吧!同样,前面任何一个程序都可以这样加使gdi+画出来的东西看上去很平滑(为什么有人说是变模糊了呢= =、百思不得其解中...)。

Photobucket

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB6 GDI模块是一种在VB6中使用GDI(Graphics Device Interface)图形设备接口的模块。GDI是一套功能强大的图形绘制和处理API,它可以用于创建和编辑各种图形,如线条、矩形椭圆、多边形等。 在VB6中,可以引用GDI模块来获取GDI的特性和功能。通过使用GDI模块,我们可以实现一些有趣和实用的图形绘制操作,如绘制图形、填充颜色、设置字体等。我们可以通过调用GDI模块中的函数和方法,来操作GDI接口,实现各种图形效果和交互操作。 VB6 GDI模块提供了一些方便的函数和方法,用于实现GDI操作。例如,我们可以使用GDI模块中的函数来创建绘图表面、选择绘图工具(画和画刷)、绘制图形、填充颜色和文字等。我们可以通过设置参数来调整绘图属性,如颜色、线条宽度、字体大小和风格等。 使用VB6 GDI模块,我们可以轻松地在程序中实现各种图形效果,如绘制直线、矩形、圆形、多边形、曲线等。我们还可以添加文字和图像,并对它们进行各种操作和变换。此外,我们还可以创建图形界面元素,如按钮、滚动条、进度条等。 总之,VB6 GDI模块是一种在VB6中使用GDI图形设备接口的模块,它提供了一些函数和方法,用于实现各种图形绘制和处理操作。通过使用GDI模块,我们可以实现丰富多样的图形效果和界面元素,增强应用程序的交互性和美观性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值