このプログラムは、WM_GETMINMAXINFO メッセージをフックし、パラメータを変更することによって、フォームの最小サイズと最大サイズを制限します。この例では、メッセージとともに渡される MINMAXINFO ユーザ定義型変数にアクセスし、変数に加えた変更を反映するために、mhGetData 関数および、mhSetData 関数を使用しています。このプログラムを実行するには、新規フォーム モジュール (Form1) を作成し、そこにメッセージ フック コントロール (MessageHook1) を配置し、以下のコードをフォームのコード モジュールへ貼り付けます。
VB
' 定数の宣言。
Const WM_GETMINMAXINFO = &H24
' ユーザ定義型の宣言。
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
Private Sub Form_Load()
' フック対象のフォームを指定します。
MessageHook1.hWndHook = Me.hWnd
' フックするメッセージを指定します。
MessageHook1.HookEnabled(WM_GETMINMAXINFO) = True
End Sub
Private Sub MessageHook1_Message(wMsg As Long, wParam As Long, lParam As Long, bDiscard As Boolean, lResult As Long)
' 変数の宣言。
Dim info As MINMAXINFO
' パラメータをローカル変数にコピーします。
mhGetData lParam:=lParam, DestBuffer:=info, BufferSize:=LenB(info)
' パラメータを変更します。
With info
.ptMaxSize.x = 300 ' 最大化したときの幅。
.ptMaxSize.y = 300 ' 最大化したときの高さ。
.ptMaxTrackSize.x = 300 ' サイズ変更したときの最大幅。
.ptMaxTrackSize.y = 300 ' サイズ変更したときの最大の高さ。
.ptMinTrackSize.x = 100 ' サイズ変更したときの最小幅。
.ptMinTrackSize.y = 100 ' サイズ変更したときの最小の高さ。
End With
' 変数を書き戻して、変更を反映させます。
mhSetData lParam:=lParam, SrcBuffer:=info, BufferSize:=LenB(info)
' Visual Basic へメッセージを送らないようにします (内部機構との競合を防ぐため)。
bDiscard = True
End Sub