怎么去掉ComboBox的右键菜单功能?

xyhv 2003-08-08 03:36:46
请问怎么去掉ComBox的右键菜单功能?
...全文
50 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gpo2002 2003-08-08
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Form_Load()

With Combo1
.AddItem "Item A"
.AddItem "Item B"
.AddItem "Item C"
End With

'enable button to hook
Command1(1).Enabled = True
Command1(2).Enabled = False

Combo1.Text = "edit is Unhooked"

End Sub


Private Sub Form_Unload(Cancel As Integer)

'just in case, call the unhook method
Call UnHook(hwndEdit)

End Sub


Private Sub Command1_Click(Index As Integer)

Select Case Index

Case 1:

'get the handle to the edit portion
'of the combo control
hwndEdit = FindWindowEx(Combo1.hwnd, 0&, vbNullString, vbNullString)

If hwndEdit <> 0 Then
'show that the handle was obtained and hook
Combo1.Text = "Hooked: edit handle is " & CStr(hwndEdit)
Call Hook(hwndEdit)

'disable button so can't hook again
Command1(1).Enabled = False
Command1(2).Enabled = True

End If

Case 2:
If hwndEdit <> 0 Then
Call UnHook(hwndEdit)

Combo1.Text = "edit is Unhooked"

'enable button to hook
Command1(1).Enabled = True
Command1(2).Enabled = False

End If

Case 3: Unload Me

End Select

End Sub
=============================================
Option Explicit

Public Const GWL_WNDPROC As Long = -4
Public Const WM_CONTEXTMENU As Long = &H7B
Public defWndProc As Long

'used to hold the handle to the combo's edit window
Public hwndEdit 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 Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Declare Function FindWindowEx Lib "user32" _
Alias "FindWindowExA" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long


Public Sub Hook(hwnd As Long)

If defWndProc = 0 Then

defWndProc = SetWindowLong(hwnd, _
GWL_WNDPROC, _
AddressOf WindowProc)
End If

End Sub


Public Sub UnHook(hwnd As Long)

If defWndProc > 0 Then

Call SetWindowLong(hwnd, GWL_WNDPROC, defWndProc)
defWndProc = 0

End If


End Sub


Public Function WindowProc(ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

'only if the handle is that of the
'edit control in the Combo...
If hwnd = hwndEdit Then

'watch for the context menu message
Select Case uMsg
Case WM_CONTEXTMENU

'eat the message -- no popup menu appears
WindowProc = 0

'alternatively, comment out the above, and
'uncomment below to show your own menu (make
'sure the correct menu name is specified)
' Form1.PopupMenu Form1.mnuPopup
' WindowProc = 0

Case Else

'not the message of interest,
'so process normally
WindowProc = CallWindowProc(defWndProc, _
hwnd, _
uMsg, _
wParam, _
lParam)
End Select

End If


End Function





1,451

社区成员

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

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