我想应该用setwindowlong()函数来串接TEXT控件的窗口函数。Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case Msg
    Case WM_LBUTTONDOWN
    Case WM_LBUTTONUP
    Case WM_MOUSEMOVE
    Case Else
        WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
    End Select
End Function

解决方案 »

  1.   

    prevWndProc=GetWindowLong(txt.hwnd,GWL_WNDPROC)
    SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)
    WndProc()的函數見上(breadjyh新小魚)
      

  2.   

    恳请给我一个完整的程序,那几段代码小弟实在没法运行,API啊什么的请全部声明出来,谢谢!我对API一点也不熟悉,只能抄代码而已。
      

  3.   

    Public 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
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
      

  4.   

    为什么都是零星的代码,我没法组合到一起!!!特别是这个WNDPROC我简直不知道怎么调用!谁能给我一个完整的程序,包括声明,调用都有的,还有过程!
      

  5.   

    你將WndPorc函數放到模塊中,把我的代碼加到窗體初始化Form_load()中.
    有空最好了解一下VC.呵呵~~
      

  6.   

    *.bas
    Public 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
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic prevWndProc As Long
    自已用API View查一查WM_LBUTTONDOWN,GWL_WNDPROC等的十六進制值.要用Public聲明並放在模塊文件中.Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case Msg
        Case WM_LBUTTONDOWN
        Case WM_LBUTTONUP
        Case WM_MOUSEMOVE
        Case Else
            WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
        End Select
    End Function
    *.frm中
    Private Sub Form_Load()
    prevWndProc=GetWindowLong(txt.hwnd,GWL_WNDPROC)
    SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)
    你自已的代碼....
    End Sub
      

  7.   

    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202
    Public Const WM_MOUSEMOVE = &H200
    Public Const GWL_WNDPROC = (-4)
    把这些补再上面代码中*.bas的声明段中
      

  8.   

    SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)
    应该改为:
    Call SetWindowLong(txt.hWnd, GWL_WNDPROC, AddressOf WndProc)
      

  9.   

    为什么执行Call SetWindowLong(txt.hWnd, GWL_WNDPROC, AddressOf WndProc) 时总是说“WNDPROC”参数不可选?
      

  10.   

    我以前也是这个错误,WndProc参数不可选,所以我还以为我调用有什么错误。
      

  11.   

    用系统API不就可以了吗?很简单的。
      

  12.   

    以下的代码,我试了,挺灵的。*.bas
    Public 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
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic prevWndProc As Long
    自已用API View查一查WM_LBUTTONDOWN,GWL_WNDPROC等的十六進制值.要用Public聲明並放在模塊文件中.Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case Msg
        Case WM_LBUTTONDOWN
        Case WM_LBUTTONUP
        Case WM_MOUSEMOVE
        Case Else
            WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
        End Select
    End Function
    *.frm中
    Private Sub Form_Load()
    prevWndProc=GetWindowLong(txt.hwnd,GWL_WNDPROC)
    SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)
    你自已的代碼....
    End Sub
      

  13.   

     to Frank_Xu()
    为什么我运行那段代码总是出错,提示参数不可选???
    CALL SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)
    就是这句,“WNDPROC”被加蓝,说“WNDPROC”参数不可选!怎么回事?
    望解答!
    请把你能运行的工程发给我,最好把工程的EXE也一起带上。
    [email protected]
      

  14.   

    我重新測試並通過
    完全代碼如下:
    *.BASOption 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex 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 WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202
    Public Const WM_MOUSEMOVE = &H200
    Public Const WM_RBUTTONDBLCLK = &H206
    Public Const WM_RBUTTONDOWN = &H204
    Public Const WM_RBUTTONUP = &H205
    Public Const GWL_WNDPROC = (-4)
    Public prevWndProc As Long
    Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case Msg
        Case WM_LBUTTONDOWN
        Case WM_LBUTTONUP
        Case WM_MOUSEMOVE
        Case WM_RBUTTONDOWN
        Case WM_RBUTTONUP
        Case WM_RBUTTONDBLCLK
        Case Else
            WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
        End Select
    End Function
    *.FRM
    //Text1是你的TextBox控件名
    Private Sub Form_Load()
    prevWndProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
    Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf WndProc)
    End Sub如果還有問題就是你vb本身的問題.
    上面要加上AddressOf,
    SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)是VC的寫法
      

  15.   

    Frank_Xu()
    谢谢了,通过,不知我那里出了毛病。
    最后问一句,当鼠标双击是会选中TEXT中的内容,这又用哪个值?
      

  16.   

    除了Frank_Xu()和灌水的人以外,其它人都给分.
    因为,Frank_Xu()必须到另一个帖子去拿分
    haha