コンポーネントでウィンドウメッセージを取得し処理する - C#

コンポーネントでウィンドウメッセージを取得し、処理するコードを紹介します。

基本的なしくみ

コンポーネントでウィンドウメッセージを取得するには WndProc()メソッドをオーバーライドします。WndProcメソッドの引数にウィンドウメッセージが与えられますので、メソッド内でウィンドウメッセージを判定して必要な処理を実行します。

コード

下記のコードはマウスボタンの左クリック(WM_LBUTTONDOWN)を取得し、マウスの左ボタンが押された場合、コントロールの背景色を黒に変更するコードです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinformVisualComponent
{
  public partial class VisualComponent : Control
  {
    public const int WM_LBUTTONDOWN = 0x00000201;

    public VisualComponent()
    {
      InitializeComponent();
    }

    public VisualComponent(IContainer container)
    {
      container.Add(this);
      InitializeComponent();
    }

    protected override void WndProc(ref Message message)
    {
      base.WndProc(ref message);

      if (message.Msg == WM_LBUTTONDOWN) {
        this.BackColor = System.Drawing.Color.Black;
      }
    }
  }
}

解説

  public const int WM_LBUTTONDOWN = 0x00000201;
にて、マウスボタンの左クリックを通知するウィンドウメッセージ WM_LBUTTONDOWNの定数を定義します。

  protected override void WndProc(ref Message message)
  {
    base.WndProc(ref message);

    if (message.Msg == WM_LBUTTONDOWN) {
      this.BackColor = System.Drawing.Color.Black;
    }
  }
にて WndProcをオーバーライドします。メソッドの最初の
base.WndProc(ref message);
を抜くと動作エラーになりますので、忘れずに追加してください。

実行結果

コントロールのBackColorプロパティをを黒以外の適当な色に設定して実行します。


コントロールの上にマウスポインタを移動させ、マウスの左ボタンでクリックするとコントロールの背景色が黒に変わります。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2011-11-10
iPentec all rights reserverd.