正在阅读:在VB中使用API函数(子类处理)在VB中使用API函数(子类处理)

2004-02-14 09:34 出处:eNet学院 作者:佚名 责任编辑:pjl
子类处理   调用原窗口函数将由CallWindowProc来完成.这里是它的声明: 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   第一个参数是原窗口函数的地址,其他的同你接收到的四个参数一样.你可以改变其中的值来控制对消息的处理.例如,当你收到了一条WM_MOUSEMOVE消息时,你从lParam中得到鼠标所在位置的坐标并将其改成了其他的坐标.那么原窗口函数就会认为鼠标位于其他的位置从而做出一些有趣的事如显示其他控件的Tooltip.   你指定的返回值也是有意义的,它依赖于发送的消息. 在结束你的程序时将控制权交回给原窗口函数是很重要的,通常在Form_Unload中完成如下: Ret& = SetWindowLong(Me.Hwnd, GWL_WNDPROC, oldWndProcAddress) 如果你在VB中启动程序时忘掉了这一行,结果将是VB崩溃并会丢失尚未保存的数据.千万要小心. 这里是子类处理的一个简单示例: Dim oldWndProc As Long Private Sub Form_Load() oldWndProc = SetWindowLong(Me.Hwnd, GWL_WNDPROC, AddressOf MyWndProc) End Sub Private Sub Form_Unload() Ret& = SetWindowLong(Me.Hwnd, GWL_WNDPROC, oldWndProc) End Sub Function MyWndProc(ByVal Hwnd As Long,ByVal wMsg as Long,ByVal wParam As Long,ByVal lParam As Long) Debug.Print wMsg & " " & wParam & " " & lParam Ret& = CallWindowProc(oldWndProc, Hwnd, wMsg, wParam, lParam) End Function
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品