Вот это напарился. Надо было подменить оконную процедуру, пока вспомнил как это делаеться... Вот, небольшой примерчик наваял, может кому полезно будет (буду знать где можно быстро найти )
Простой пример по подмене старой оконной процедуры новой, и наоборот.
| Код | Option Explicit Dim isChanged As Boolean
Sub ChangeWindowProc() If isChanged Then hPrevWndProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WindowProc) Else SetWindowLong Me.hWnd, GWL_WNDPROC, hPrevWndProc End If End Sub
Private Sub Command1_Click() isChanged = Not isChanged ChangeWindowProc End Sub |
Внимание! Обязательно новый модуль! Т.к. AddressOf может ссылаться только на другой модуль!
| Код | Option Explicit Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Public 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 GCL_WNDPROC = (-24) Public Const WM_LBUTTONDOWN = &H201 Public hPrevWndProc&
Public Function WindowProc&(ByVal hWnd&, ByVal iMsg&, ByVal wParam&, ByVal lParam&) Select Case iMsg Case WM_LBUTTONDOWN Beep Exit Function End Select WindowProc = CallWindowProc(hPrevWndProc, hWnd, iMsg, wParam, lParam) End Function |
|