Window-06 徹底的にエディットボックスへの文字列貼り付けを禁止する

Q 事情により、エディットボックスへの文字列貼り付けを一切禁止したいのですが、どうすればいいでしょうか。
A サブクラス化して対応します。
どう使う?
※RADツールで作成したウィンドウMainWnd上に、
エディットボックスEditBox1が存在していることとする。
'グローバル変数の宣言(コードの一番上に記述することを推奨)
Dim OriginalWndProc As VoidPtr

'コールバック関数の宣言(グローバル変数宣言の次に記述することを推奨)
Function NoPasteProc(hWnd As HWND,uMsg As DWord,wParam As WPARAM,lParam As LPARAM) As LRESULT
    Select Case uMsg
        Case WM_CONTEXTMENU
            'コンテキストメニューを無効にする
            NoPasteProc=1
        Case WM_PASTE
            '貼り付ける動作を無効にする
            NoPasteProc=1
        Case Else
            NoPasteProc=CallWindowProc(OriginalWndProc,hWnd,uMsg,wParam,lParam)
    End Select
End Function
'制限をかけるタイミングで実行するコード
OriginalWndProc=SetWindowLong(GetDlgItem(hMainWnd,EditBox1),GWL_WNDPROC,AddressOf(NoPasteProc))
'制限を解除する(Destroyイベント等)タイミングで実行するコード
SetWindowLong(GetDlgItem(hMainWnd,EditBox1),GWL_WNDPROC,OriginalWndProc)
徹底的です(^^;;;
「コンテキストメニュー」とは、エディットボックスを右クリックしたときに出る「元に戻す」「切り取り」「コピー」「貼り付け」などのコマンドが並んだメニューのことです。
なぜこれを禁止しているのに、わざわざ貼り付ける動作までも無効にするのか?それは、コンテキストメニューを無効にしたとしてもキーボードから「Ctrl+V」で貼り付けができてしまうからで、それすらも無効にするために貼り付ける動作も無効にしています。
しかし、他のウィンドウからWM_SETTEXTメッセージ(説明は省略)を送られたりすると、数字以外の入力もできてしまいます(爆)
そこまで考えていてはキリがありませんから、この辺にしておきましょう。
これに前回Window-05の「数字以外を入力できなくする」を組み合わせれば、プログラムを使わない限りは絶対に数字以外の入力は不可能!という徹底的な禁則処理ができてしまいます。一度お試しあれ。

メニューに戻る