⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 117.txt

📁 VB文章集(含API、窗口、数据库、多媒体、系统、文件、等等)
💻 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 + -