« January 2005 | Main | March 2005 »

February 2005

01 February 2005

wndProc メッセージハンドリング

Control.WndProcメソッド
Windowsフォームを用いてGUIを実装する場合に、想定していないオペレーションが実施されて強制終了してしまうケースがある。またそういったオペレーションは手順を覚えていない場合が多く、再現が困難であることがある。log4netなどを用いて、WndProc内でハンドリングしてあげればオペレーションを再現することができる。


protected override void WndProc(ref Message m)
{
log.Debug(System.Windows.Forms.Control.FromHandle(m.LParam) + " // " + m.ToString());
base.WndProc (ref m);
}

ちなみに
すべてのメッセージは、 PreProcessMessage メソッドを通じてフィルタ処理された後に WndProc メソッドに送られます。

となっていたけど私が実験したプログラムではPreProcessMessageメソッドは通過しなかったなぁ。これはやり方の問題かもしれない。
それから上記のコードでは、MenuItemをハンドリングできません。いや厳密にはできているんだけど、MenuItemはSystem.Windows.Forms.Controlの派生ではないので、FormHandleメソッドでハンドルが取れません。なので、MenuItem関係については、それぞれのイベント(OnClickなど)の中でログ出力するように記述してあげるとよいのでしょう。
ユーザテストなどにおいて、Visual StudioなどのIDEでのデバッグ環境が構築できない場合において、有用な手段だと思います。製品版とは異なる位置づけになりますが、検査版の場合に導入するとよいでしょう。

ゲーム伝説 キタ━━━━(゚∀゚)━━━━ッ!!

ゲーム伝説

マッピー:(C)1983 2004 NAMCO LTD.,ALL RIGHTS RESERVED.
ディグダグ:(C)1982 1985 2004 NAMCO LTD.,ALL RIGHTS RESERVED.
ドルアーガの塔:(C)1984 2004 NAMCO LTD.,ALL RIGHTS RESERVED.
グロブダー:(C)1984 2004 NAMCO LTD.,ALL RIGHTS RESERVED.
モトス:(C)1985 2004 NAMCO LTD.,ALL RIGHTS RESERVED.
待ってたよ!ドルアーガの塔をゲットしたいです。

Access Ranking

Powered by Six Apart
Sponsored links