Windowsメッセージを指定のウィンドウプロシージャに渡す
Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal MSG As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Integer, ByVal hWnd As Integer, ByVal MSG As Integer, _
ByVal wParam As Integer, ByVal lParam As Integer) As Integer
LRESULT CallWindowProc(
WNDPROC lpPrevWndFunc,
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
引数
lpPrevWndFunc
元のウィンドウ関数へのポインタhWnd
(GetWindowLong()関数にGWL_WNDPRCを設定して取得可)
対象のウィンドウハンドルMsg
WindowsからのメッセージwParam
同、パラメータlParam
同上戻り値
正常終了のとき ウィンドウのハンドルサンプル
エラーのとき 0
ダウンロード(CallWindowProc.lzh 6.15KB)Private Sub Check1_Click()
Beep
With Me.Check1
If .Value = 0 Then
Label1.Caption = "ボタンをチェックするとTextBoxのキー入力のみを無効化します" + _
Chr(13) + Chr(10) + "マウスによる操作はそのままできます。"
Else
Label1.Caption = "キーボードからの入力を無効化しました。"
End If
End With
End Sub
Private Sub Form_Load()
With Me
.Text1.Text = "終了するときは必ず右上の[X]ボタンから終了してください"
.Check1.Caption = "キー入力を無効化する"
.Label1.Caption = "ボタンをチェックするとTextBoxのキー入力のみを無効化します" + _
Chr(13) + Chr(10) + "マウスによる操作はそのままできます。"
'TextBoxのウィンドウプロシージャを変更する
hOldWndProc = SetWindowLong(.Text1.hWnd, GWL_WNDPROC, AddressOf TextBoxProc)
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
'変更したウィンドウプロシージャを元に戻す
Call SetWindowLong(Me.Text1.hWnd, GWL_WNDPROC, hOldWndProc)
End Sub