- Код: Выделить всё
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = -4
Public Const WM_ACTIVATE = &H6
Public gWH As Long
Public OldWndProc As Long
Public Paused As Boolean
Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lReturn As Long
WindowProc = CallWindowProc(OldWndProc, hwnd, Msg, wParam, lParam)
If Msg = WM_ACTIVATE Then
Paused = (wParam And &HFFFF&) = 0
End If
End Function
В форме:
- Код: Выделить всё
Private Sub Form_Load()
gWH = Me.hwnd
OldWndProc = SetWindowLong(gWH, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Private Sub Form_Terminate()
SetWindowLong gWH, GWL_WNDPROC, OldWndProc
End Sub
В зависимости от значения переменной Paused форма сворачивается, а игра становится на паузу.
Это работает, но при отладке, если программа стопарится на какой-нибудь ошибке, то среда VB6 часто вылетает - закрывается без каких-либо сообщений. Когда этот код закоментирован, таких проблем нет. Это я что-то недоделал, или это нормально?