2009-06-01 16 views
3

私は私たちが持っている古いMFCベースのライブラリの周りに.NETラッパーを書いています。これは、ウィンドウメッセージを使用して通知を送信するクラスをベースにしています。これは、ユーザーがウィンドウのハンドルを渡すことができる関数を持ち、そのウィンドウはメッセージを受け取ります。ウィンドウなしでウィンドウメッセージを送受信できますか?

私のラッパーのユーザーにサブクラスControlを渡し、メッセージを受け取るためにコントロールのハンドルを渡すだけでいいかもしれませんが、それは恐ろしいことです。私のラッパークラスには、古いライブラリがメッセージを送信するたびに発生するイベントがあり、メッセージのデコードを賢明なものにすることができます。しかし、私はラッパークラスをコントロールする必要はありません。

「ダミー」ウィンドウハンドルを作成し、そのハンドルに送信されたメッセージをウィンドウを作成せずに受け取る方法はありますか?

答えて

9

MessageOnly Windowsという概念があります。ラッパークラスに内部メッセージ専用ウィンドウを作成し、このハンドルを古いライブラリーに渡すことができます。

0

メッセージポンプでスレッドを作成してメッセージを送信してみることもできます。スレッドは、C#コードで処理したいイベントを発生させます。

-1

ウィンドウハンドルなしでウィンドウハンドルを作成することはできません。ウィンドウハンドルですが、これはWindowsの場合のウィンドウですが、WS_VISIBLEフラグが設定されていないウィンドウを作成してメッセージ中継に使用できます。のみ。私はその技術をMFC専用アプリケーションでクロススレッド通信を行うために使用します(誰にも言わないでください)。 CWndから(C++)クラスを派生させ、メッセージを処理させ、受け取ったすべてのメッセージに対して関数を呼び出したり、シグナルを送出したりすることができます。私はそれがあなたのC#コードで動作するようになると思いますが、私はその経験がありません。

関連する問題