六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

使用LineDDA函數做容易動畫

[摘要]如果在VB中實現比較簡單的動畫效果,也許很多人會選用Timer控件,其實API函數中有一個LineDDA,用這個函數實現簡單的動畫效果還是比較不錯的。因為是API函數,所以很一般化,因此很多語言都可以用它來實現簡單的動畫。 該函數的原型如下: BOOL LineDDA(int nXSt...
如果在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




主站蜘蛛池模板: 天天躁夜夜躁狠狠躁2021a | 婷婷激情五月 | 日韩视频观看 | 视频在线观看免费视频 | 欧美综合色 | 亚洲三级在线观看 | 亚洲视频成人 | 日日摸狠狠的摸夜夜摸 | 亚洲国产成人久久综合一 | 亚洲精品 国产 日韩 | 最近新免费韩国视频资源 | 日韩欧美国产亚洲 | 天天干天天舔 | 思思久久96热在精品国产免费 | 中文在线免费看视频 | 午夜精品久视频在线观看 | 中文字幕免费观看视频 | 亚洲第一男人天堂 | 日韩我不卡 | 侵犯希崎中文字幕在线 | 小小小小视频高清日本 | 全黄一级裸片视频免费 | 一本久道久久综合多人 | 性欧美巨大极品videos | 污污在线观看视频 | 日本色中色 | 一级做a爰片性色毛片小说 一级做a爰片性色毛片思念网 | 午夜毛片福利 | 亚洲狼网站狼狼鲁亚洲下载 | 午夜网页 | 欧美亚洲国产日韩一区二区三区 | 天天干天天舔 | 在线91精品国产免费 | 羞羞漫画弹窗 | 婷婷综合久久狠狠色99h | 亚洲福利 | 一二三四高清在线手机视频 | 亚洲一区免费在线观看 | 四虎国产精品影库永久免费 | 天天看天天摸色天天综合网 | 天堂 在线最新版在线 |