|
|
Option Explicit
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject 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 Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Dim x As Integer, y As Integer
Dim Buffer As Long, hBitmap As Long, Desktop As Long, hScreen As Long, ScreenBuffer As Long
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then
Unload Me
End If
End Sub
Private Sub Form_Load()
'To get the device context for the desktop(whole screen)
Desktop = GetWindowDC(GetDesktopWindow())
'to create a device context compatible with a known device context
'and assign it to a long variable
hBitmap = CreateCompatibleDC(Desktop)
hScreen = CreateCompatibleDC(Desktop)
'to create bitmaps in memory for temporary storage compatible with a known bitmap
Buffer = CreateCompatibleBitmap(Desktop, 32, 32)
ScreenBuffer = CreateCompatibleBitmap(Desktop, Screen.Width / 15, Screen.Height / 15)
'assign device contexts to the bitmaps
SelectObject hBitmap, Buffer
SelectObject hScreen, ScreenBuffer
'save the screen for later restoration
BitBlt hScreen, 0, 0, Screen.Width / 15, Screen.Height / 15, Desktop, 0, 0, SRCCOPY
End Sub
Private Sub Form_Unload(Cancel As Integer)
'restores the desktop to the saved picture when program ends
'try to comment out following line and see
BitBlt Desktop, 0, 0, Screen.Width / 15, Screen.Height / 15, hScreen, 0, 0, SRCCOPY
End Sub
Private Sub tmr1_Timer()
y = (Screen.Height / 15) * Rnd
x = (Screen.Width / 15) * Rnd
'copy 32x32 portion of screen into buffer at x,y
BitBlt hBitmap, 0, 0, 32, 32, Desktop, x, y, SRCCOPY
'paste back slightly shifting the values for x and y
BitBlt Desktop, x + (3 - 6 * Rnd), y + (2 - 4 * Rnd), 32, 32, hBitmap, 0, 0, SRCCOPY
End Sub
|
|