📄 64.txt
字号:
隐藏文本框控件的环境菜单
如果一个窗体中有一个文本框控件,当你用鼠标右键单击它时,会弹出一个环境菜单,里面有诸如:拷贝、撤销、粘贴之类的选项。有时这个菜单会妨碍你的应用程序界面的一致性,或者你想让用户在用鼠标右键单击文本框时,弹出你自已事先设计好的菜单。
首先添加一个标准模块,在标准模块中写入如下代码:
Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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 Const GWL_WNDPROC = (-4)
Public Const WM_CONTEXTMENU = &H7B
Global lpPrevWndProc As Long
Global gHW As Long
Public Sub Hook()
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf gWindowProc)
End Sub
Public Sub Unhook()
Dim temp As Long
temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub
Public Function gWindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_CONTEXTMENU
Then Debug.Print "截获 WM_CONTEXTMENU于 " & Now
gWindowProc = True
Else ' 传递其他所有消息到默认的消息句柄
gWindowProc = CallWindowProc(lpPrevWndProc, hWnd, Msg, wParam, lParam)
End If
End Function
在窗体中加入两个文本框控件。然后制作一个名为mnuTempMenu的菜单,其中有两个菜单项,分别为Option1和Option2
将下面的代码放在相应的事件中。
Private Sub Form_Load()
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is TextBox Then
gHW = Ctrl.hWnd
Hook
End If
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unhook
End Sub
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then Me.PopupMenu mnuTempMenu
End If
End Sub
按F5运行程序后,用鼠标分别右击两个文本框,你会发现Text1文本框会弹出你自定义的菜单,而Text2则没有反应。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -