4

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

メッセージを受信するために、ラッパーのユーザーにサブクラスControl化してコントロールのハンドルを渡すように要求することもできますが、それは恐ろしいことです。古いライブラリがメッセージを送信するたびに発生するイベントをラッパー クラスに持たせ、メッセージを意味のあるものにデコードできるようにしたいと考えています。しかし、ラッパー クラスをコントロールにする必要はありません。

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

4

3 に答える 3

10

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

于 2009-06-01T13:36:03.917 に答える
0

メッセージ ポンプを使用してスレッドを作成し、そこにメッセージを送信してみてください。その後、スレッドは、C# コードで処理する必要のあるイベントを発生させます。

于 2009-06-01T14:03:15.517 に答える
-1

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

于 2009-06-02T08:15:23.627 に答える