|
Tipp 041: Grafiken schnell und flimmerfrei zeichnen mit BitBlt
Autor: Alexander Kopatz VB-Version: Visual Basic 6.0 Download: Beispielprojekt Tipp-041
Beschreibung
Wenn Sie eine oder mehrerer Grafiken schnell und flimmerfrei zeichnen wollen, so stoßen Sie mit Visual Basic Bordmitteln schnell an die Grenzen der Machbarkeit. Dieses Beispiel schafft Abhilfe, denn mit der API-Funktion BitBlt können Sie schnelle flimmerfreie und sogar transparente Animationen realisieren.
Quellcode
frmBitBlt
Form frmBitBlt
Label lblCaption
PictureBox picMask
' VISUAL BASIC WORLD
' ===========================================
' Das große Portal zum Thema Visual Basic.
'
' Wenn Ihnen dieser Source Code gefallen hat,
' dann empfehlen Sie Visual Basic World bitte
' weiter und/oder setzen Sie einen Link auf:
'
' http://www.visualbasicworld.de/
'
' Vernetzen Sie sich mit uns:
'
' http://twitter.com/visualbasicwrld
Option Explicit
Private Declare Function BitBlt Lib "gdi32" _
(ByVal hDestDC As Long, ByVal X As Long, _
ByVal Y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal hSrcDC As Long, _
ByVal xSrc As Long, ByVal ySrc As Long, _
ByVal dwRop As Long) As Long
Private Const SRCAND = &H8800C6 'Ziel = Quelle AND Ziel
Private Const SRCINVERT = &H660046 'Ziel = Quelle XOR Ziel
Private Const SRCPAINT = &HEE0086 'Ziel = Quelle OR Ziel
Private Const SRCERASE = &H440328 'Ziel = Quelle AND (NOT Ziel)
Private Const SRCCOPY = &HCC0020 'Ziel = Quelle
Private RetVal As Variant
Private XPixel As Long
Private YPixel As Long
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft
XPixel = XPixel - 10
Case vbKeyRight
XPixel = XPixel + 10
Case vbKeyUp
YPixel = YPixel - 10
Case vbKeyDown
YPixel = YPixel + 10
End Select
Me.Cls
RetVal = BitBlt(Me.hDC, XPixel, YPixel, picMask.Width, _
picMask.Height, picMask.hDC, 0, 0, SRCAND)
'Zuerst wird die Maske auf die Form gezeichnet.
RetVal = BitBlt(Me.hDC, XPixel, YPixel, picMask.Width, _
picMask.Height, picSprite.hDC, 0, 0, SRCINVERT)
'Danach folgt die eigentlich Grafik. So ist es
'möglich bestimmte Bereiche transparent anzuzeigen,
'die welche in der Masken-Grafik definiert werden.
DoEvents
End Sub
Private Sub Form_Load()
XPixel = Me.Width / 34
YPixel = Me.Height / 34
RetVal = BitBlt(Me.hDC, XPixel, YPixel, picMask.Width, _
picMask.Height, picMask.hDC, 0, 0, SRCAND)
RetVal = BitBlt(Me.hDC, XPixel, YPixel, picMask.Width, _
picMask.Height, picSprite.hDC, 0, 0, SRCINVERT)
End Sub
|
Visual Basic World @ Twitter
Folgen Sie Visual Basic World!
Wenn Ihnen Visual Basic World gefällt, dann folgen Sie uns doch bei
Twitter
(@visualbasicwrld).
Vielen Dank!
|