C#(.NET)におけるメッセージフック

投稿者: shuichi, タグ: ,,,, 投稿日時: 2005/09/04 22:17

昔にVisual Basicをやっていたころ色々と凝ったことをやろうとするとVisual Basicの標準機能では実現できないということが多くありました。こういう時はサブクラス化でメッセージをフックするのが最終手段だったのですが、まぁこれが面倒くさい。最初からVisual C++などで書いたほうが良かったと思うくらいでした。

で、C#やVisual Basic.NETなどの.NET対応の言語においてコントロールに送られてくるメッセージを受け取るには、コントロールのクラスを継承してWndProcをオーバーライドすればメッセージを処理することができます。継承のできなかったVisual Basicと比較するとかなり扱いやすくなっていると思います。

一応これで十分なのですが他にも方法があり、Eco-Softさんのコントロールのサブクラス化(フック)を行うに書かれているように、Windows APIを用いる方法もあります(GCHandle.Allocがポイントなんですよね)。これはVisual Basicにおけるサブクラス化と同じ方法なんですけどね…。

また、さらにMemory of the futureさんのNativeWindowクラスを用いたサブクラス化を見て知ったのですが.NETのNativeWindowクラスを用いる方法があるようです。

自分のコントロールのメッセージを処理したい場合は継承してWndProcのオーバーライドでいいと思いますが、他のコントロールに送られてくるメッセージを拝借してこちら側で処理をしたい場合などにはNativeWindowクラスを用いる方法がいいかもしれませんね。

The Code ProjectやCodeGuruで面白いサンプルコードを見つける

投稿者: shuichi, タグ: ,,, 投稿日時: 2005/08/15 23:09

お盆休み中は暇でしたので久しぶりにC#で遊んでいました。まぁ、C#初心者なのでコードを書いていると案の定つまずきます。.Net Framework SDKに付属しているドキュメントを読んでもよくわからないときには以下のサンプルコードやTipsが多数公開されている便利なサイトを。

すべて有名なサイトですね…。The Code ProjectとCodeGuruは英語ですが、かなりおすすめです。適当に記事を見ていくだけでもなかなか面白いですよ。