textbox的快捷方式

wufayun 2003-08-27 01:04:36
小弟想在文本框类单击右键时弹出快捷菜单,但是它先弹出默认的快捷方式然后才弹出我自己的快捷菜单。
Private Sub txtsearch_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu kuaijie
End If

End Sub
大侠帮忙解决解决
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihonggen0 2003-08-27
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyControl Then

If Len(Clipboard.GetText) > 0 Then

Clipboard.Clear

End If

End If

End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then

OldWindowProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)

' 取得窗口函数的地址

Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)

' 用SubClass1_WndMessage代替窗口函数处理消息

End If

End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then

Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc)

' 恢复窗口的默认函数



' 弹出自定义菜单

End If

End Sub












'Module1:

Option Explicit

Public OldWindowProc As Long

' 保存默认的窗口函数的地址

Public Const WM_CONTEXTMENU = &H7B

' 当右击文本框时,产生这条消息

Public Const GWL_WNDPROC = (-4)



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

Private 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 Function SubClass1_WndMessage(ByVal hWnd As OLE_HANDLE, ByVal Msg As OLE_HANDLE, ByVal wp As OLE_HANDLE, ByVal lp As Long) As Long

If Msg = WM_CONTEXTMENU Then

SubClass1_WndMessage = True

Else

SubClass1_WndMessage = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)

' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理

End If

End Function




lihonggen0 2003-08-27
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyControl Then

If Len(Clipboard.GetText) > 0 Then

Clipboard.Clear

End If

End If

End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then

OldWindowProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)

' 取得窗口函数的地址

Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)

' 用SubClass1_WndMessage代替窗口函数处理消息

End If

End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then

Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc)

' 恢复窗口的默认函数



' 弹出自定义菜单

End If

End Sub












'Module1:

Option Explicit

Public OldWindowProc As Long

' 保存默认的窗口函数的地址

Public Const WM_CONTEXTMENU = &H7B

' 当右击文本框时,产生这条消息

Public Const GWL_WNDPROC = (-4)



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

Private 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 Function SubClass1_WndMessage(ByVal hWnd As OLE_HANDLE, ByVal Msg As OLE_HANDLE, ByVal wp As OLE_HANDLE, ByVal lp As Long) As Long

If Msg = WM_CONTEXTMENU Then

SubClass1_WndMessage = True

Else

SubClass1_WndMessage = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)

' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理

End If

End Function



1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧