如何在VB例程中接收自定义消息
日期:2007年6月7日 作者: 相关tags: 何在 VB 例程 接收 自定义 消息- [1] [2] 下一页
- 完全手册Excel VBA典型实例全集:通过368个例子掌握
- 各类卫星电视接收机密码全集
- 剖析从VB转型到VB.NET的必要性
- 用VB6.0编写客户端自动升级程序
- VB设计有语音报时和报警功能的闹钟
- 如何在VB例程中接收自定义消息
- 用VB6.0编写电脑抽奖程序
- vb控制word的类模块,查找、替换Word文档内容
- 手机RMVB播放器 s60v5
- Allok RM RMVB to AVI MPEG DVD Converter 3.4.0314
- VBScript可视化程序设计
- YY(歪歪)好友批量消息群发工具v1.2(稳定免费版)_YY(歪歪)
- 《VB2008从入门到精通》 (PDF格式英文版)
- VB 6.0 中文版教程
- 英雄无敌5 自定义新英雄补丁包
- Divx Avi Asf Wmv Wma Rm Rmvb 修复器 V3.23
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
您可以用API函数SetWindowLong指定处理消息的窗口过程(window procedure)为自定义的函数WindowProc,捕获消息ID为WM_USER+1的自定义消息或系统消息。并且,为了保证窗口能正确的响应消息,需要保存原来默认的窗口过程并在自定义函数WindowProc中调用。如下例,在按钮事件中发送自定义消息,WindowProc捕获了窗口大小变化的系统定义消息和用户自定义的消息并显示用户自定义的消息参数wParam:
在Moduel中加入以下代码,
Option EXPlicit
Private Const GWL_WNDPROC = -4
Public Const GWL_USERDATA = (-21)
Public Const WM_SIZE = &H5
Public Const WM_USER = &H400
Private 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Function Hook(ByVal hwnd As Long) As Long
Dim pOld As Long
‘指定自定义的窗口过程
pOld = SetWindowLong(hwnd, GWL_WNDPROC, _
AddressOf WindowProc)
‘保存原来默认的窗口过程指针
SetWindowLong hwnd, GWL_USERDATA, pOld
Hook = pOld
End Function
Public Sub Unhook(ByVal hwnd As Long, ByVal lpWndProc As Long)
Dim temp As Long
注释:Cease subclassing.
temp = SetWindowLong(hwnd, GWL_WNDPROC, lpWndProc)
End Sub
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_SIZE Then
‘处理WM_SIZE消息
MsgBox "SIZE"
End If
If uMsg = WM_USER + 1 Then
MsgBox wParam
End If
Dim lpPrevWndProc As Long
‘查询原来默认的窗口过程指针
lpPrevWndProc = GetWindowLong(hw, GWL_USERDATA)
‘调用原来的窗口过程
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg,wParam, lParam)
End Function
