プログラム例

次に、簡単なプログラム例を示します。このプログラムは、フォームのクライアント領域をドラッグすることによって、タイトル バーをドラッグするのと同じようにフォームを移動できるようにするものです。これは、フォームのクリック イベントを、タイトル バーのクリック イベントに置き換えることによって実現しています。このプログラムを実行するには、新規フォーム モジュール (Form1) を作成し、そこにメッセージ フック コントロール (MessageHook1) を配置し、以下のコードをフォームのコード モジュールへ貼り付けます。

VB
' 定数の宣言。
Const WM_LBUTTONDOWN = &H201    ' クライアント領域でマウスの左ボタンを押した時に送られるメッセージ。
Const WM_NCLBUTTONDOWN = &HA1   ' 非クライアント領域でマウスの左ボタンを押した時に送られるメッセージ。
Const HTCAPTION = 2             ' タイトル バーをクリックしたことを示すフラグ。

Private Sub Form_Load()
    ' hWndHook プロパティに、フック対象のフォームのハンドルを指定します。
    MessageHook1.hWndHook = Form1.hWnd
    ' WM_LBUTTONDOWN メッセージのフックを有効にします。
    MessageHook1.HookEnabled(WM_LBUTTONDOWN) = True
End Sub

Private Sub MessageHook1_Message(wMsg As Long, wParam As Long, lParam As Long, bDiscard As Boolean, lResult As Long)
    ' wMsg には、WM_LBUTTONDOWN が設定されています。
    ' メッセージを WM_NCLBUTTONDOWN に変えます。
    wMsg = WM_NCLBUTTONDOWN
    ' wParam を HTCAPTION (キャプション) に変更します。
    ' ここでの wParam は、非クライアント領域のどの部分をクリックしたかを示します。
    wParam = HTCAPTION
End Sub