テキストボックスで右クリックするとでてくるデフォルトのメニュー(コンテクストメニュー)の出力を抑制するサンプルです。
サブクラス化してWM_CONTEXTMENUを握りつぶしているだけです。
'--------------------------------------------------------
' Form1
'--------------------------------------------------------
Private Sub Form_Load()
Call Hook(Text1.hwnd)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Call UnHook(Text1.hwnd)
End Sub
'--------------------------------------------------------
' Module
'--------------------------------------------------------
Public Declare FunctionSetWindowLong 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
Public ghWnd As Long
'-------------------------------------------------------
Public Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_CONTEXTMENU
Case Else
WndProc = CallWindowProc(ghWnd, hwnd, uMsg, wParam, lParam)
End Select
End Function
Public Sub Hook(hwnd As Long)
ghWnd = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc)
End Sub
Public Sub UnHook(hwnd As Long)
Dim lngret As Long
If ghWnd <> 0 Then
lngret = SetWindowLong(hwnd, GWL_WNDPROC, ghWnd)
End If
End Sub
DownLoad vbtips114.lzh 2KB (VB6.0)