• ベストアンサー

テキストボックスでコンテキストメニューをでなくしたい

テキストボックスで右クリックしたらコンテキストメニューがでますがこれをでなくしたいのですがどうしたらできますか? 過去ログは全部見たのですがどうもしっくり来なかったので質問させていただきました。m( _ _ )m よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#4564
noname#4564
回答No.2

  #1さんご提示の通り、サブクラス化を使います。 ちょっとむずかしいですが、サンプルコードを提示しておきます。 ※ タグが使えませんのでインデントが潰れています。読みにくいと思いますが、気合で読んでください。(^-^; ※ マルチインスタンスには対応していません。複数のコントロールをサブクラス化する場合、コンポーネント化する場合は変更が必要です。 Option Explicit 'API関数の宣言 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 Const WM_COPY = &H301 'コピー Public Const WM_CUT = &H300 '切り取り Public Const WM_PASTE = &H302 '張り付け Public Const WM_RBUTTONUP = &H205 '右ボタンUp Public ghWnd As Long 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 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 WM_CUT, WM_PASTE, WM_RBUTTONUP 'カット & ペースト、右クリックの無効化。 '特定のコントロールの場合のみメッセージをフック。 If Screen.ActiveControl.Name <> "txtFoo" Then WndProc = CallWindowProc(ghWnd, hwnd, uMsg, wParam, lParam) End If Case Else WndProc = CallWindowProc(ghWnd, hwnd, uMsg, wParam, lParam) End Select End Function '↓以下、フォームモジュール。 Private Sub Form_Load() 'テキストボックスをサブクラス化。 Call Hook(Me.txtHoge.hwnd) End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 'サブクラス化解除。 Call UnHook(Me.txtHoge.hwnd) End Sub

その他の回答 (2)

noname#4564
noname#4564
回答No.3

  #2 の続きです。 サブクラス化に自信がなければ、ダミーのコンテキストメニューを割り当てるという方法もあります。言うまでもなく、こちらの方がずっと容易です。  

1kou
質問者

お礼

わざわざコードを書いてくれてありがとうございます!!サブクラス化をがんばってやってみようと思います。

1kou
質問者

補足

ダミーのコンテキストメニューを割り当てるというのはNO.1のかたがおしえてくれてURLに載っているようなことのことでしょうか?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1
参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=365624

関連するQ&A

専門家に質問してみよう