2012-03-22 9 views
0

最近、win32のAPIとIMで動作するようになりました。 私は約4-5の窓を使う予定のプロジェクトを持っています。私はこれらのそれぞれを別々のcppファイルに分けて、それぞれが独自のメッセージループを持つようにしたいと思います。ウィンドウからウィンドウに情報を渡すにはどうすればいいですか?(エントリポイントはありますか?)現時点では、すべてのウィンドウをcase WM_CREATE:の間に作成し、必要に応じて表示しています。ウィンドウごとにWin32 APIクラスが異なる?

私は素晴らしいOOPデザインをしようとしていますが、それに問題があります。私の主な問題は、ウィンドウ間の通信です。私はC#とC++でかなりの経験を持っていますが、これ以外にwin32 APIは問題ではありません。

ありがとうございました!ウィンドウ間通信の

+0

また、Get/SetWindowLongPtr関数(特にGWL_USERDATAフィールド)を参照することもできます。これにより、各ウィンドウの 'this'ポインタをどこかに格納することができます。 – Skizz

答えて

2

私はあなたの場合を除き、あなたはウィンドウごとのメッセージループをしたいとは思いません各ウィンドウを独自のスレッドにしたい。代わりにウィンドウが必要になるでしょう。

各ウィンドウクラスには独自のウィンドウプロシージャがあり、lpfnWndProcフィールドをWNDCLASSのフィールドに設定して登録すると、RegisterClassに渡されます。これを実行したら、CreateWindowで新しいウィンドウを作成するときにそのクラスを使用できます。 (同期通信用)あなたの場合

、あなたはおそらくそれがカスタムメッセージ(WM_APP + x)を受け入れるように、ウィンドウプロシージャを実装した後、(非同期通信用)PostMessageを使用してウィンドウ間でカスタムメッセージを渡したいと思うでしょうかSendMessage。必要に応じて、別のウィンドウ用に別のウィンドウクラスとウィンドウプロシージャを作成できます。単一のメッセージループは、これらのすべての手順にメッセージをポンピングすることができます。

+0

実際には 'WM_APP + x'(アプリケーションメッセージ)です。 'WM_USER + x 'の範囲は、プライベートウィンドウクラス**内で**使用されます。 – MSalters

+0

@MSaltersあなたは正解です、ありがとう!私の防衛では、これをしてからかなりの数年が経ちました;) –