背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-68.html    注册17xie 一起来写书 实现您的出书梦想!

Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

它的参数及其说明如表9-4所示。

9-4  BitBlt()参数及其说明

参 数

说 明

hDestDC

接受位图的设备

x

目标矩形左上角的x坐标

y

目标矩形左上角的y坐标

nWidth

目标矩形的宽度

nHeight

目标矩形的高度

hSrcDC

源设备

xSrc

源位图左上角的x坐标

ySrc

源位图左上角的y坐标

dwRop

光栅操作

注意:

@        特别值得一提的是参数dwRop,它提供了源图与目标图的15中组合方式,但是一般的都采用SRCCOPY,即把源图复制给目标图,其余的方式请参阅附录一中的有关内容。

下面就以几个示例从不同的方面介绍Bitblt()函数的应用。

9.2.1  图像的动态效果

这个应用程序的功能是能够以四种不同的效果动态显示一幅图像,如“飞入效果”、 “两面向中间”、 “从中间扩散”和“拉伸”等效果,具体的步骤如下:

1.启动一个新的项目

在窗体上添加一个PictureBox控件,它的作用是充当图像动态变换中源图的容器,属性设置如下表9-5所示。

9-5  控件属性设置

属 性

设 置

(Name)

Picture1

AutoRedraw

True

AutoSize

True

Enabled

True

Picture

(Bitmap)

ScaleMode

1 – Twip

Visible

False

其中Picture属性初始化为源图所代表的位图。

2.添加控件

在窗体上添加第二个PictureBox控件,作用与第一个PictureBox控件相对应,是充当图像动态变换中目标位图的容器,属性设置如下表9-6所示。

 

 

9-6  属性设置

属 性

设 置

(Name)

Picture2

AutoRedraw

False

AutoSize

False

Enabled

True

Picture

(None)

Visible

True

由于第二个PictureBox控件作为目标位图的容器,所以它的Picture属性一定要设置为None

在窗体上添加四个Command控件,在程序的运行过程中单击它们可以触发相应的动态效果,如单击“飞入效果”按钮,就会看到一幅图像从左边飞入PictureBox控件中。

另外还要把一个Timer控件放置到窗体上,用于图像动态显示时延时,它的属性设置如图9-8所示。

9-8  Timer控件的属性设置

添加控件后的窗体如图9-9所示,其中四个按钮从上到下的名称分别为Command1Command2Command3Command4

9-9  添加控件后的窗体

3.添加代码

下面以“飞入效果”按钮为例来添加代码,其余动态效果的实现过程请参看后面的源程序代码。在设计阶段双击“飞入效果”按钮,在它的Command1_Click()事件中添加下列代码:

Private Sub Command1_Click()

Picture2.Cls

'单击“飞入效果”按钮,清屏

For I = 0 To W Step 1

   BitBlt Picture2.hDC, 0, 0, I, H, Picture1.hDC, W - I, 0, srccopy

   '从左面飞入

   For g = 0 To 10000 Step 1

   Next g

   '延时

Next I

End Sub

在程序的运行过程中单击“飞入效果”按钮时,激活了Command1_Click()事件,程序首先通过Picture2.Cls这一条语句清除PictureBox控件上原有的图像,为下面动态显示新的图像作准备。

Command1_Click()事件的代码段中有一个循环:

For I = 0 To W Step 1

   BitBlt Picture2.hDC, 0, 0, I, H, Picture1.hDC, W - I, 0, srccopy

   '从左面飞入

Next I

动态显示图像的主要功能都是在这里实现的,“飞入”的效果实现的过程相当于不断的拉着图像从左向右走,而运行时就好象是从左边飞入的一样。此外为了让读者更加清楚的看见“飞入”的效果,在程序中还有一段延时的代码:

   For g = 0 To 10000 Step 1

   Next g

   '延时

技巧:

@        其实“延时”的功能是通过一个有限次的循环来实现的,加入这段代码完全是为了控制动态显示的速度。

按照上面的方法给各个控件添加相应的代码,其余几个动态效果的实现代码见附后的源程序。

4.运行

存储文件,按功能间F5运行程序,结果如图9-10所示。

9-10  运行单击“拉伸效果”按钮时的结果

附源程序代码:

程序清单

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

'声明函数

Private Const srccopy = &HCC0020

'常量的说明

Dim H As Integer

Dim W As Integer

'定义两个全局变量用于存储PictureBox控件的高度和宽度

Dim I As Integer

Dim J As Integer

'定义两个全局变量用于控制循环

 

Private Sub Command1_Click()

Picture2.Cls

'单击"飞入效果"按钮,清屏

For I = 0 To W Step 1

   BitBlt Picture2.hDC, 0, 0, I, H, Picture1.hDC, W - I, 0, srccopy

   '从左面飞入

   For g = 0 To 10000 Step 1

   Next g

   '延时

Next I

End Sub

 

Private Sub Command2_Click()

Picture2.Cls

'单击"两面向中间"按钮,清屏

For I = 0 To W / 2 Step 1

    BitBlt Picture2.hDC, I, 0, 1, H, Picture1.hDC, I, 0, srccopy

    BitBlt Picture2.hDC, W - I, 0, W, H, Picture1.hDC, W - I, 0, srccopy

     '从两面向中间显示

    For g = 0 To 10000

    Next g

    '延时

Next I


字数:3827    最后更新:1年以前 [08-29 14:32]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第九章  [后一页]:第九章
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号