★卢培培★ ── 欢迎光临卢培培(goodname008)的BLOG

人生真正的快乐,多在贫家茅舍,少在富室红楼。

用户操作
[即时聊天] [发私信] [加为好友]
卢培培ID:goodname008
80808次访问,排名1294,好友0人,关注者0人。
goodname008的文章
原创 22 篇
翻译 0 篇
转载 5 篇
评论 289 篇
卢培培的公告


只有干不成事的人
没有干不成的事


代码下载说明:请将代码下载地址的链接复制到浏览器的地址栏,按下回车即可正常下载。

最近评论
gujiachun:下载不了 能不能发到
er6782334@163.com邮箱中 谢谢
HotUs:下载不了了,能不能发一份到我邮箱
hontus@163.com
谢谢
HotUs:下载不了了,能不能发一份到我邮箱
hontus@163.com
谢谢
jingang123gz:在C# 中怎么屏蔽WIN键啊?????
kennylyj:我在做类似的东西的时候遇到一个问题:
由于需要将一些16位的DOS程序的输出导出,因此使用了管道,但直接CreateProcess这些程序是不行的,必须通过ComSpec这个环境变量得到命令行程序的路径并把要运行的DOS程序的路径及相关参数作为命令行程序的参数才行,或者是先运行cmd/command,然后通过标准写端口写入要启动的程序的参数
而这样做却导致系统的虚拟机程序……
文章分类
收藏
    相册
    其它图片
    文章用图
    A.我的软件
    1.注册表大师 v2.0
    2.窗口间谍
    3.图易贴 v1.1
    B.强烈推荐
    1.VB打造超酷个性化菜单[一]
    2.VB打造超酷个性化菜单[二]
    3.VB打造超酷个性化菜单[三]
    4.剖析VC++函数调用约定
    C.有脚印的地方
    CSDN--中国软件网
    微软中国社区
    微软中文新闻组
    D.开放源代码
    1.鼠标感应器
    2.VB自绘菜单类
    3.你想要钱吗?
    E.友情链接
    1. 凝尘
    2. 羽毛羽毛
    3. 泗水寻芳
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 利用LineDDA函数做简单动画收藏

    新一篇: VC无负担实现XP风格界面 | 旧一篇: 剖析VC++函数调用约定

        如果在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

        这是上面的源程序下载地址:http://csdngoodname008.51.net/LineDDA.zip

     

    *-------------------------------------------*

    *  转载请通知作者并注明出处,CSDN欢迎您!   *

    *  作者:卢培培(goodname008              *

    *  邮箱:goodname008@163.com                *

    *  专栏:http://blog.csdn.net/goodname008   *

    *-------------------------------------------*

    发表于 @ 2004年08月01日 17:44:00|评论(loading...)|编辑

    新一篇: VC无负担实现XP风格界面 | 旧一篇: 剖析VC++函数调用约定

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 卢培培