我在参考书上看到一段这样的代码,它是为了处理系统状态区所送过来的鼠标消息(已经把窗体隐藏,并且把图标加入到系统状态区中):
Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = WM_USER Then
        If wParam = vbKeyF7 And (lParam And &H80000000) <> 0 Then
            Form1.Capture
            Form1.picCopy.Refresh
            Form1.WindowState = vbNormal
            Form1.Show
        End If
    ElseIf Msg = WM_USER + 100 Then
        If lParam = WM_LBUTTONDBLCLK Then
            Form1.WindowState = vbNormal
            Form1.Show
        ElseIf lParam = WM_LBUTTONUP Then
            Form1.PopupMenu Form1.mTarget
        End If
    End If
    WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function
我想问:(1)Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long这个函数是用户自定义的函数,还是API函数?
(2)WM_USER 是表示什么的常量?
(3)(lParam And &H80000000)<>0是什么意思?
(4)WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)又是什么意思?
麻烦大家了!

解决方案 »

  1.   

    (1)Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long这个函数是用户自定义的函数,还是API函数?    自定义的函数(2)WM_USER 是表示什么的常量?    WM_USER = &H400 或 消息常量 > WM_USER  '自定义消息(3)(lParam And &H80000000)<>0是什么意思?    lParam And &H80000000 与运算结果不为零(4)WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)    使用API函数CallWindowProc调用原来的消息处理过程    
      

  2.   

    能不能详细点,我是初学者,怎么知道要定义一个function wndProc的函数,况且还有那么多的参数?还有&H400和&H80000000分别是什么意思?最后为什么又要用WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)?能不能变简单点?
      

  3.   

    这就涉及到windows的消息机制了,以后会熟悉的。如果感兴趣可以看看《windows编程》之类的书籍,看了那些C的代码就知道为什么了