自定义处理窗体的移动消息WM_MOVE

来源:互联网 发布:seo外包公司如何优化 编辑:程序博客网 时间:2024/06/10 03:31

标准模块中:

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

 

Public Const GWL_WNDPROC = (-4)

Public Const WM_MOVE = &H3

 

Public procOld As Long                       '保存原来的窗体处理的地址

 

消息回调函数

Public Function SysProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Static i As Integer, j As Integer

    If iMsg = WM_MOVE Then MsgBox "Move"                         '先处理自定义消息

SysProc = CallWindowProc(procOld, hwnd, iMsg, wParam, lParam)

'再处理系统定义消息

End Function

 

'窗口

Private Sub Form_Load()

       'procOld = GetWindowLong(Me.hwnd, GWL_WNDPROC)

procOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SysProc)  

'获得原消息处理句柄,并将消息处理转交自定义函数

End Sub

Private Sub Form_Unload(Cancel As Integer)

    SetWindowLong hwnd, GWL_WNDPROC, procOld

End Sub

 

 

注意点:请千万要在Form_Unload中还原原有的信息处理循环函数调用地址,否则程序运行将出错!
原创粉丝点击