Visual Basic Tips


テキストボックス・デフォルトメニューの出力抑制(API)


テキストボックスで右クリックするとでてくるデフォルトのメニュー(コンテクストメニュー)の出力を抑制するサンプルです。
サブクラス化して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 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

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)