CodeItBetter Programming Another VB Programming Blog

How to Spin a Picture

Posted on January 5, 2009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
'Graphics - How to Spin a Picture

'Add a Timer Control and four Picture Boxes to your form and set the Timer Interval property to 10.
'Add pictures to Picture1 and Picture2. All the Pictures should be at the same size.

Dim dAngle As Double
Const NUM_TURNS = 36
Const PI = 3.14159265358979
Const CENTER_X = 4000
Const SRCCOPY = &HCC0020
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
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 Sub Form_Load()
    With Picture1
        .AutoSize = True
        .Visible = False
        .AutoRedraw = True
        .BorderStyle = 0
    End With
    With Picture2
        .AutoSize = True
        .Visible = False
        .AutoRedraw = True
        .BorderStyle = 0
    End With
    With Picture3
        .Width = Picture1.Width
        .Height = Picture1.Height
        .Visible = False
        .AutoRedraw = True
        .BorderStyle = 0
    End With
    With Picture4
        .Width = Picture1.Width
        .Height = Picture1.Height
        .AutoRedraw = True
        .BorderStyle = 0
    End With
End Sub
 
Private Sub Timer1_Timer()
    Picture3.Cls
    If Cos(dAngle * PI / 180) >= 0 Then
        Call StretchBlt(Picture3.hdc, (Picture1.Width - Abs(Cos(dAngle * PI / 180) * _
            Picture1.Width)) / (2 * Screen.TwipsPerPixelX), 0, Abs(Cos(dAngle * PI / 180) * _
            Picture1.Width) / Screen.TwipsPerPixelX, Picture1.Height / Screen.TwipsPerPixelY, _
            Picture1.hdc, 0, 0, Picture1.Width / Screen.TwipsPerPixelX, Picture1.Height / _
            Screen.TwipsPerPixelY, SRCCOPY)
    ElseIf Cos(dAngle * PI / 180) < 0 Then
        Call StretchBlt(Picture3.hdc, (Picture2.Width - Abs(Cos(dAngle * PI / 180) * _
            Picture2.Width)) / (2 * Screen.TwipsPerPixelX), 0, Abs(Cos(dAngle * PI / 180) * _
            Picture2.Width) / Screen.TwipsPerPixelX, Picture2.Height / Screen.TwipsPerPixelY, _
            Picture2.hdc, 0, 0, Picture2.Width / Screen.TwipsPerPixelX, Picture2.Height / _
            Screen.TwipsPerPixelY, SRCCOPY)
    End If
    Call BitBlt(Picture4.hdc, 0, 0, Picture3.Width / Screen.TwipsPerPixelX, Picture3.Height / _
        Screen.TwipsPerPixelY, Picture3.hdc, 0, 0, SRCCOPY)
    Picture4.Refresh
    dAngle = dAngle + 360 / NUM_TURNS
    dAngle = dAngle Mod 360
End Sub
Filed under: Graphics Leave a comment
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment


 

No trackbacks yet.