您的位置广东网盟 > 文章资讯 > 软件应用 > 编程开发 > VC/VC++ > 文章内容

利用LineDDA函数做简单动画

作者:佚名  来源:不详  发布时间:2008-7-30 21:36:38

    如果在VB中实现比较简单的动画效果,也许很多人会选用Timer控件,其实API函数中有一个LineDDA,用这个函数实现简单的动画效果还是比较不错的。因为是API函数,所以很一般化,因此很多语言都可以用它来实现简单的动画。

    该函数的原型如下:

    BOOL LineDDA(int nXStart, int nYStart, int nXEnd, int nYEnd, LINEDDAPROC lpLineFunc, LPARAM lpData);

    参数说明如下:

        nXStart:起点的X

        nYStart:起点的Y

        nXEnd:终点的X

        nYEnd:终点的Y

        lpLineFunc:回调函数的地址

        lpData:用户自定义参数(这个参数会传给回调函数)

    这个函数和动画其实没什么关系,它的功能就是计算出连接两点的线段上的每一个屏幕像素的坐标,这两个点的坐标已经在函数的前四个参数中给出。每计算出一个坐标,该函数就会调用第五个参数所指的回调函数,我们可以在回调函数中完成一些简单的操作,以实现动画效果。

    回调函数的原型是: VOID CALLBACK LineDDAProc(int X, int Y, LPARAM lpData);

    前两个参数是点的坐标,第三个参数就是由LineDDA传过来的自定义参数,是由我们自己指定的,传什么都行。  :)

    LineDDA 函数在VB中的声明是:

    Public Declare Function LineDDA Lib "gdi32.dll" (ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal lpLineDDAProc As Long, ByVal lParam As Long) As Long

    其回调用函数原型为:

    Public Sub LineDDAProc(ByVal X As Long, ByVal Y As Long, ByVal lpData As Long)

    VB中,回调函数必须放在标准模块中,传递函数地址时使用AddressOf运算符,后面接函数名。

    VB源程序如下:

    窗体模块:

 

Option Explicit

 

Private Sub Command1_Click()

    ' 循环调用 LineDDA 函数, 在其指定的回调中实现简单动画

    Dim i As Long

    Dim point(9) As POINTAPI

    For i = 0 To UBound(point) - 1

        point(i + 1).X = point(i).X + 50

        If point(i).Y = 0 Then point(i + 1).Y = 50 Else point(i + 1).Y = 0

        LineDDA point(i).X, point(i).Y, point(i + 1).X, point(i + 1).Y, AddressOf LineDDAProc, Me.hdc

    Next i

End Sub

 

    标准模块:

 

Option Explicit

 

' API 函数声明

Public Declare Function LineDDA Lib "gdi32.dll" (ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal lpLineDDAProc As Long, ByVal lParam As Long) As Long

Public Declare Function DrawText Lib "user32.dll" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

 

' API 类型声明

Public Type RECT

    Left As Long

    Top As Long

    Right As Long

    Bottom As Long

End Type

 

Public Type POINTAPI

    X As Long

    Y As Long

End Type

 

' API 常量声明

Private Const DT_CENTER = &H1

Private Const DT_VCENTER = &H4

 

' LineDDA 函数的回调函数

' 参数: X, Y 为点坐标, lpData 为自定义参数

Public Sub LineDDAProc(ByVal X As Long, ByVal Y As Long, ByVal lpData As Long)

    Dim rct As RECT

    If X Mod 10 = 0 Then

        rct.Left = X

        rct.Right = rct.Left + 18

        rct.Top = Y

        rct.Bottom = rct.Top + 18

        DrawText lpData, "LPP", -1, rct, DT_CENTER Or DT_VCENTER

        Sleep (100)

        DoEvents

    End If

End Sub

 

    

    上面的程序实现的效果是在窗体上按照一条反折线动态显示一些文字,在窗体中添加一个CommandButton,复制上面的代码即可。其实,在著名的PGP加密软件中,当密码输入错误时,窗口会很调皮的抖动一下,这个效果完全可以用 LineDDA 函数实现,关键就看我们的想象力了。  :D

 
Tags:广东网盟  
  •         用户名: 验证码: 验证码,看不清楚请点击刷新验证码 (注“”为必填内容。)


    文章评论: [ 查看全部 ] 网友评论
    网盟推荐文章
    · 计算机主板工作原理
    · 如何制作漂亮的Excel表格
    · Linux实战之NFS服务器图形化配置
    · ARP攻击专家介绍切断传播途径六招
    · IP反向追踪技术的关键技术及实现方法
    · 服务器安全访问帐号设置要点
    · 实战照片打印机选购
    · Windows系统的超级帐户SYSTEM
    · 服务器上为员工开私有空间的方法
    · Windows Server 2003 FTP Server进阶架
    · 网络打印机共享方法
    · GHOST系统的安装方法介绍二
    · GHOST系统的安装方法介绍一
    · 锐腾无盘系统使用设置详解
    · 《Windows系统网络工具使用手册》
    · 各种ADSL路由器端口映射设置
    · 网吧电影视频服务器架设完全入门教程
    · Intel整合CPU明年如期发布
    · 网吧的不二选择,福晶外设劲舞英雄套装
    · 多服务器无盘网吧解决方案
    网盟热门文章
    · 卡巴斯基8.0最新试用版
    · 深圳华强北最大电脑公司高薪招聘2000-
    · 急招服务型网管(深圳罗湖)
    · XP母盘制作详细介绍
    · 广州一网吧急招网管(多名)
    · 如果程序老提示错误,弹出类似以下错误
    · 广州荔湾网吧急诚聘(见习网管.网管)
    · 广州大型网吧招聘技术员
    · 全国各省电信及网通DNS列表
    · 网吧客户机系统安装详解
    · 深圳市布吉街道E度空间网吧招聘普通网
    · 广东东莞黄江网吧招网管数名!
    · 广州海珠区网吧招聘人员(服务员、收银
    · 网吧网管系统安装维护经验谈
    · 东莞大型网吧招技术主管
    · 广州市电脑城招技术员1名和门市销售5名
    · 锐起2046详细安装图解教程
    · 东莞塘厦枫叶网吧招网管数名
    · 东莞常平金鼎网吧急招网管服务员
    · 神舟低价的秘密!我在神舟的日子(一个
    关于网盟 | 网站帮助 | 广告合作 | 下载声明 | 友情连接 | 联系方式

    Copyright © 2003-2008 Gdwg.Net. All Rights Reserved .
    中国广东网管联盟设计维护.网站备案:粤ICP备08020875号