自定义处理窗体的移动消息WM_MOVE
2005-03-16 15:06
411 查看
标准模块中:Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPublic 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 LongPublic 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 LongStatic 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 SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong hwnd, GWL_WNDPROC, procOldEnd Sub
注意点:请千万要在Form_Unload中还原原有的信息处理循环函数调用地址,否则程序运行将出错!
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 LongStatic 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 SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong hwnd, GWL_WNDPROC, procOldEnd Sub
注意点:请千万要在Form_Unload中还原原有的信息处理循环函数调用地址,否则程序运行将出错!
相关文章推荐
- 移动无边框窗体(设置标志位更流畅,或者发送WM_SYSCOMMAND和SC_MOVE + HTCAPTION消息)
- 移动窗体的函数,在窗体的WM_LBUTTONDOWN消息中,响应下面的函数
- WIN32无边框窗体的缩放、移动与WM_NCHITTEST消息&&UpdateLayeredWindow重要心得
- 在.net(C# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息。
- C# 使用WM_NCLBUTTONDOWN消息实现任意位置移动窗体
- C# 窗体处理自定义消息
- WM_MOVE 窗体移动后的位置
- 自定义View想使用Scroller实现滑动效果,但是事件接收出现问题,只收到ACTION_DOWN,而无法收到ACTION_MOVE, ACTION_UP等消息的处理
- Wpf和WinForm在窗体中处理用户自定义消息的不同方式
- 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)
- WIN32无边框窗体的缩放、移动与WM_NCHITTEST消息&&UpdateLayeredWindow重要心得
- 在.net(C# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息
- 关于WM_NCHITTEST消息(移动无标题对话框多个)
- MFC 中WM_消息处理对应的处理函数
- Delphi对WM_NCHITTEST消息的处理
- 啊Ran讲微信开发(.net) :订阅号+自定义服务器(URL接入,文本消息处理)
- 处理WM_NCPAINT消息
- C++ 关于MFC多线程编程中的一些注意事项 及自定义消息的处理
- Winform无边框窗体(FormBorderStyle属性设为None)自定义移动
- 用WM_MOUSEMOVE消息画轨迹点时,发现鼠标移动很快的时候 只能画出少数几个点。