我想应该用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
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
SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)
WndProc()的函數見上(breadjyh新小魚)
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
有空最好了解一下VC.呵呵~~
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
Public Const WM_LBUTTONUP = &H202
Public Const WM_MOUSEMOVE = &H200
Public Const GWL_WNDPROC = (-4)
把这些补再上面代码中*.bas的声明段中
应该改为:
Call SetWindowLong(txt.hWnd, GWL_WNDPROC, AddressOf WndProc)
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
为什么我运行那段代码总是出错,提示参数不可选???
CALL SetWindowLong(txt.hwnd,GWL_WNDPROC,WndProc)
就是这句,“WNDPROC”被加蓝,说“WNDPROC”参数不可选!怎么回事?
望解答!
请把你能运行的工程发给我,最好把工程的EXE也一起带上。
[email protected]
完全代碼如下:
*.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的寫法
谢谢了,通过,不知我那里出了毛病。
最后问一句,当鼠标双击是会选中TEXT中的内容,这又用哪个值?
因为,Frank_Xu()必须到另一个帖子去拿分
haha