コンポーネントでウィンドウメッセージを取得し処理する - 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を愛用