![]() ![]() |
|
在VB中进行各种图形切换的方法 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:44:48 文章录入:杜斌 责任编辑:杜斌 | |
|
|
图形的切换在有关于多媒体的应用中是经常见到的。常见的切换方式可以概括为以下几种。 切换(Cut):当前图象快速的被另一幅图象所取代 VB和Windows API为生成切换效果提供了有力的工具。图形切换的实质是通过快速组合或拷贝来建立分离的图象。在某些情况下,建立切换效果只不过将当前图象的属性由Visible转变True,如上述效果中的弹进弹出、切换等,而多数情况下,切换效果需要调用Windows的GDI函数来完成。 图形的切换和弹进弹出是最容易实现的例子,前面已经解释过这两种切换效果的含义了。在Form中拉出Image1和Image2,注意,Image1和Image2的坐标和大小应完全一样。并设置好事先准备好的两幅图形。将Image1的Visible设为True,再将Image2的Visible设为false,双击Form,输入如下程序代码: Private Sub Form_Click()
拉进和滑入是稍微复杂点的切换方式。在Form1中加入Timer组件,设interval为1,再在Form1中加入PictureBox1,假设PictureBox1的Left为-3000,Width为3000;Form1的Width为9000,双击Timer组件,加入下列程序代码: Private Sub Timer1_Timer() 运行程序时,由于Pictrue1在边界外,所以看不见,随着Picture.Left+100,Pictrue1由边界外缓缓滑入Form中,当Picture1距左边界大约6000时,也就大致在Form1中间位置时,Picture1停止运动。形成了图形从屏幕边或一角平稳滑入的拉入效果。而如果在Picture1静止后的位置上事先设置好和Picture1一样大小的Picture2,这样又形成下一图形逐渐穿过并覆盖当前图形的滑入效果。 上述算法都很简单,也能满足一般的编程需求,不过在进行一些高要求的编程时,这些效果则略显粗糙了,但调用Windows本身的GDI函数则可满足一些近似苛求的效果。下面我们通过调用GDI函数重写上面的滑入效果。 在Form1中设两个尽可能大小相同的picCurrentPicture和picNextPictrue,并设picCurrentPicture的Visible为True,picNextPicture的Visible设为False;Autosize设为True,ScaleMode设为Pixel,再在Form1中加入一个Command和一个Timer。程序编写过程如下: 先对公共部分进行说明,可以直接从VB中的Text API View中将有关BitBlt的声明复制过来,具体内容如下: Declare Function BitBlt Lib "GDI" (ByVal hDestDC As _ 双击Timer组件,输入下列代码: Private Sub Timer1_Timer() 双击Command1,输入如下代码: Private Sub Command1_Click() 这时再运行程序,点击Command1,怎么样,这次滑入的效果是不是比用前一种方法要精细的多? 另外常用到的还有翻转、旋转以及淡入淡出。限于篇幅,这里只作简要介绍。 在翻转效果中,显示每一图形的反面并不重要,关键在于需要用到一块空间来改变它。同时也必须考虑图象大小不同的情况。另外,通过跟踪某些关键事件并使用它们检测图象应该变大还是变小,可以使程序更加简练。 假设一矩形,中心画出一条垂直线段,切换从矩形上最宽时开始,当切换的前一半完成时,矩形中心线两边的部分都缩小为窄长条,在这一过程中其宽度按一固定量(设为TempWidth)减小,在切换的后半过程中,矩形将会扩展到新图象的尺寸。 这种缩小和扩大的完成方式将决定切换过程的光滑程度。在程序中,矩形的宽度减小某一增量(TempWidth),图形将在新矩形中重画(通过伸缩使之适合新的大小),再用Move 方法将图形向左或向右移动增量大小的一半。通过调整Timer控件的速度和增量的大小,就能生成预期的效果。 至于淡入淡出,相对来说有些复杂,不过原理只是把所显示的图形的各个像素随机变黑或是将随机的将变黑的象素变回原色,也需要调用GDI函数,详细说明需用较大的篇幅,在这里就不再过多的叙述了。 |
|
![]() ![]() |