加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【转】VB6 GDI+ 入门教程(2)—— GDI+初始化

发布时间:2020-12-16 22:17:09 所属栏目:大数据 来源:网络整理
导读:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://vistaswx.blogbus.com/logs/37196805.html 现在先让我们了解下GDI+的绘图机制。 1.初始化、关闭GDI+ 我们需要对GDI+进行初始化,才能使用它的各种功能。如果没有初始化,那么VB6就

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

现在先让我们了解下GDI+的绘图机制。

1.初始化、关闭GDI+

我们需要对GDI+进行初始化,才能使用它的各种功能。如果没有初始化,那么VB6就会莫名其妙的崩溃。呵呵。

当然程序结束了我们还要关闭GDI+释放内存。

2.Graphics

Graphics是GDI+基础。首先我们需要一个图形对象graphics(可以看作是画板),我们所有的东西都要画在这个上面。那么如何显示呢?不要急,我们可以通过GDI+内置函数从一个对象的DC(设备描述表)上创建graphics。这样我们操作graphics的时候就会显示在对象上。当然我们还可以从对象的hwnd中创建;在.net中也可以从gdi+的图像(image)中创建(直接操作在图像上)。

3.绘图工具

有了画板,我们还要画笔、画刷才能画画 - -。画笔画刷呢,在gdi+中就叫做pen、brush。画笔pen只能画一个轮廓(画线),而画刷可以对一个东西进行填充(刷子)。这个就是一个基础 呵呵,很简单吧。

4.创建第一个VB6的 GDI+ 程序

首先,我们添加下GDI+模块;然后我们需要对窗体(以后可以是其它容器)属性进行设置:AutoRedraw=True,开启自动重绘;再把ScaleMode设置成3(Pixel像素)(注:这么做是为了UI时候的统一,这一步是否执行对于GDI+直接绘制的结果不会有影响),因为GDI+基础单位就是像素(当然可以用别的单位)

好 现在双击窗体,写入下面代码:

Option Explicit
Dim graphics As Long

Private Sub Form_Load() 

    InitGDIPlus 
    GdipCreateFromHDC Me.hDC,graphics 

End Sub

Private Sub Form_Unload(Cancel As Integer) 

    GdipDeleteGraphics graphics '释放graphics占用的内存 
    TerminateGDIPlus 

End Sub

OK,F5运行。如果没有问题的话我们第一个最基础的GDI+程序已经完成了。这个基本的程序创建了一个graphics对象,当然什么还没有画呢。
通过这个程序,我们就大致了解VB6中GDI+如何初始化、关闭了。首先呢要启动GDI+,然后要创建一个graphics;关闭的时候也要做好扫地工作。

5.画线

线嘛,又不是填充,根据前面说的,我们需要一个pen。那么如何创建pen呢?呵呵,下面的代码就能创建一个pen(追加在Form_Load过程中的末尾):

Dim pen As Long
GdipCreatePen1 &HFFFF0000,1,UnitPixel,pen


这里已经新建了一个pen。为什么是GdipCreatePen1而不是GdipCreatePen2什么的呢?你可以在代码里面输入“mgdip.”这样就列出了所有的GDI+函数。通过对象浏览器可以得知pen2是根据brush来创建pen的,现在不用。

&HFFFF0000:这里就是一个16进制的ARGB (Alpha,Red,Green,Blue——透明,红色,绿色,蓝色程度,255(&HFF)是完全,0(&H0)是完全不) 的数据。当然你可以输入10进制,只是16进制很方便,2个16进制位就是一个字节,如&HFFFF0000就代表一个透明度是255(不透明),颜色是红色的一种颜色。如果你知道一些绘图技巧就很容易用这个去写 呵呵~。同时我们还能看到gdi+过程是传址的,把pen传进去。为什么不用函数返回值传出来呢?因为函数返回值要传出一个状态,执行结果的标志。一般如果成功了那么就返回的是0(Ok)。

好,现在已经拿到笔了,接下来就是用这个笔去画线了。通过查询mGdip的声明(请学会自主探索)可知有这么个API:GdipDrawLine,它的X1Y1,X2Y2是single型,继续找又发现GdipDrawLineI,它的坐标值都是Long型(我们一般用不到single,因此我们一般用GdipDrawLineI就行了)。根据它的参数名字 乱猜都能猜出来哪个参数代表什么了,于是我随便写了一句:GdipDrawLineI graphics,pen,10,200,100。注意:你需要把graphics和pen传进去,否则怎么画呢?不告诉它画在哪里~~,后面4个参数分别对应:起始点X、起始点Y、终点X、终点Y的坐标。当然扫地工作也要做好,删除pen的语句是GdipDeletePen;参数很简单,传pen进去即可。

综合起来,于是我们有了第一段真正绘制的GDI+ VB6程序,虽然它只画了一条线:

Option Explicit
  

Dim graphics As Long

Dim pen As Long

Private Sub Form_Load() 

    InitGDIPlus 

    GdipCreateFromHDC Me.hDC,graphics 

    GdipCreatePen1 &HFFFF0000,pen 

    GdipDrawLineI graphics,100 

End Sub

  

Private Sub Form_Unload(Cancel As Integer) 

    GdipDeletePen pen '删除这个笔(pen) 

    GdipDeleteGraphics graphics '释放graphics占用的内存 

    TerminateGDIPlus 

End Sub

OK,F5运行。红线没有出来?^_^……注意了 我们是在Load中绘制的。GDI+绘制与VB自己语句绘制一样。我们需要让他自动重绘(窗体的AutoRedraw=True)或者放到Paint里面:)

注:如果你不是在Load事件中绘制的东西,并且Form的AutoRedraw是True,那么别忘记全部画完后Refresh(例如 Me.Refresh)一下。因为VB的AutoRedraw的机制就是这样。但是开启AutoRedraw比较好,因为这样可以获得更快的绘制速度;全部绘制完一次性刷新还能避免闪烁啥的问题。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读