我想在vb中定义一个类似windows 消息 以便在消息发送时候 相应的处理函数能完成自己的功能! 我知道 在vc中用 函数cwnd:: sendmessage(mymessage) 或cwnd::postmessage(mymessage) 发送自定义的消息! 然后在该消息对应的函数中写自己的功能! 请问在vb中用语言怎么写 ? 用什么函数! 还有消息怎么定义 以及绑定对应处理函数! 这样我好在程序中用sendmessage (vc语言) 发送自己定义的消息! 
 最好有较完整的代码! 拜托热心朋友了! 我这边没有这样的示例!

解决方案 »

  1.   

    做子类处理,大概如下,在普通模块中,Option ExplicitPublic 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 As Long = (-4)Public lpPrevProc As LongPublic Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error Resume Next
    WindowProc = CallWindowProc(lpPrevProc, hw, uMsg, wParam, lParam)
    End FunctionPublic Sub Hook(ByVal nHwnd As Long) '将程序勾入消息环中
    lpPrevProc = SetWindowLong(nHwnd, GWL_WNDPROC, AddressOf WindowProc)
    End SubPublic Sub UnHook(nHwnd As Long)
    Call SetWindowLong(nHwnd, GWL_WNDPROC, lpPrevProc)
    End Sub
    '然后在窗体中Option ExplicitPrivate Sub Form_Load()
    Hook Me.hwnd
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    UnHook Me.hwnd
    End Sub
      

  2.   

    lingll:
      你写的代码 我看了 知道大致意思,但感觉有点难,你定义的消息名称具体是什么呢?是GWL_WNDPROC ? 我触发该消息 用什么函数?在vc中我知道用sendmessage(mymessage)或postmessage(mymessage) 这是关键呀 ! 拜托老兄了!还有我的代码插在WindowProc = CallWindowProc(lpPrevProc, hw, uMsg, wParam, lParam)前面还是后面?我的思路是 把发送该自定义的消息写在窗体的定时器中周期的用sendmessage() (这是vc语言)发送自己的消息 ! 所以肯定要知道类似sendmessage()的函数了!  
      

  3.   

    大概这样用
    Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error Resume Next
    select case umsg
        case...
        ...
        case...
        ....
    end select
    WindowProc = CallWindowProc(lpPrevProc, hw, uMsg, wParam, lParam)
    End Function各参数的用法参看msdn的WindowProc另外你说的c的sendmessage,与win api的sendmessage是一样的
    具体参看msdn,vb可以通过Declare使用这个api 函数
      

  4.   

    《在VB6中处理自定义窗口消息》还没细看!!!不知你是否需要这个
    http://www.zdnet.com.cn/developer/code/story/0,2000081534,20037800-1,00.htm
      

  5.   

    用 wm_yourmessage=wm_user+OFFSET定义你的新消息