’-------------------------------------窗口代碼
Private Sub Command1_Click()
MsgBox 1
End Sub
Private Sub Form_Load()
OldPrc = SetWindowLong(Command1.hwnd, -4, AddressOf CommandProc)
End Sub
‘-------------------------------------模塊代碼
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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public OldPrc As Long
Public Function CommandProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print Hex(Msg)
If Msg = &H201 Or Msg = &H100 Then Exit Function
CommandProc = CallWindowProc(OldPrc, hwnd, Msg, wParam, lParam)
End Function
'特別說明下,執行 Click 方法的時候是Form窗口的窗口過程調用Click方法,並非是 Command 按鈕的窗口過程,系統首先是把消息 發送給 Command 按鈕的窗口過程,然後Command 按鈕的窗口過程 又把消息 轉發給 Form窗口的窗口過程,然後 Form窗口的窗口過程 按消息種類 執行
我們寫的 Command的壹些方法,
詳細內容請參考 MSDN 或者 windows核心編程 的windows消息機制