【API Function】


簡易アニメーション
 アニメーションも、BitBlt関数を使用します。
ここでは、簡単なアニメーションを紹介しています。


フォームにピクチャボックスコントロール7つと コマンドボタンコントロール,タイマーコントロールを配置して下さい。
また、以下のような画像も作成してロードして下さい。
一番左側の画像の特定位置に、2つの画像が交互に表示されます。

Generalセクション宣言コード
Private Declare Function BitBlt Lib "gdi32" (ByVal hdcDest _
    As Long, ByVal xDest As Long, ByVal yDest As Long, _
    ByVal nWidth As Long, ByVal nHeight As Long, ByVal _
    hdcSrc As Long, ByVal xSrc As Long, ByVal ySrc As Long, _
    ByVal dwRop As Long) As Long
Dim hdc1 As Long, hdc2 As Long 'デバイスコンテキスト
Dim hdc3 As Long, hdc4 As Long
Dim hdc5 As Long, hdc6 As Long
Dim hdc7 As Long

プログラムコードを、Command1_Click,Timer1_Timer() プロシージャに追加します。

Private Sub Command1_Click()
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    Dim pw As Long, ph As Long 'コピー元の領域の幅,高さ
    Dim sx As Long, sy As Long '特定位置
    Static flag As Boolean
    pw = 32&: ph = 32& '&記号は長整数型の指定
    sx = 50&: sy = 50&
    hdc2 = Picture2.hDC: hdc3 = Picture3.hDC
    hdc4 = Picture4.hDC: hdc5 = Picture5.hDC
    hdc6 = Picture6.hDC: hdc7 = Picture7.hDC

    '2つの画像を交互に表示する
    If flag = False Then'1つ目の画像を表示
        '継続表示属性の時に描かれたものと、非継続表示属性
        'の時描かれたものとを区別する
        Picture1.AutoRedraw = True '継続表示属性にする
        '継続表示属性のデバイスコンテキストを得る
        hdc1 = Picture1.hDC
        BitBlt hdc4, 0&, 0&, pw, ph, hdc1, sx, sy, vbSrcCopy
        BitBlt hdc4, 0&, 0&, pw, ph, hdc3, 0&, 0&, vbSrcAnd
        BitBlt hdc4, 0&, 0&, pw, ph, hdc2, 0&, 0&, vbSrcPaint
        Picture1.AutoRedraw = False'非継続表示属性にする
        '非継続表示属性のデバイスコンテキストを得る
        hdc1 = Picture1.hDC
        BitBlt hdc1, sx, sy, pw, ph, hdc4, 0&, 0&, vbSrcCopy
    Else '2つ目の画像を表示
        Picture1.AutoRedraw = True
        hdc1 = Picture1.hDC
        BitBlt hdc7, 0&, 0&, pw, ph, hdc1, sx, sy, vbSrcCopy
        BitBlt hdc7, 0&, 0&, pw, ph, hdc6, 0&, 0&, vbSrcAnd
        BitBlt hdc7, 0&, 0&, pw, ph, hdc5, 0&, 0&, vbSrcPaint
        Picture1.AutoRedraw = False
        hdc1 = Picture1.hDC
        BitBlt hdc1, sx, sy, pw, ph, hdc7, 0&, 0&, vbSrcCopy
    End If
    flag = Not flag
End Sub

 このように、継続表示属性時と非継続表示属性時に描かれたものは、デバイス コンテキストを得る上で、違う物として認識されます。そして、ここでのコピーの 場合、継続表示属性と非継続表示属性を使い分けることによって背景にコピー される前とされたあとのデバイスコンテキストを得ています。
 つまり、どちらも継続表示属性で描いたなら、そこで描いたものも背景の1部 となり、次に背景を取り出したときここの描写も含まれてしまいます。
 背景をコピーするときに呼び出すデバイスコンテキストは、継続表示属性であ り、アニメーションの材料を描くときのデバイスコンテキストは、非継続表示 属性であり、この2つは別物のため、使い分けることができます。


API Functionインデックス トップ


Copyright(C)1999 Tomoya. All rights reserved.