« ゲーム伝説 キタ━━━━(゚∀゚)━━━━ッ!! | Main | [C-C-B]胸が苦しくなる »

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でのデバッグ環境が構築できない場合において、有用な手段だと思います。製品版とは異なる位置づけになりますが、検査版の場合に導入するとよいでしょう。

TrackBack

TrackBack URL for this entry:
http://bb.lekumo.jp/t/trackback/517129/31023847

Listed below are links to weblogs that reference wndProc メッセージハンドリング:

Comments

Post a comment

Access Ranking

Powered by Six Apart
Sponsored links