2

MDI アプリのすべての子ウィンドウに WM_KEYDOWN メッセージを送信する必要があります。特定のキーを押すとウィンドウが更新され、キーを1回押すだけですべての子wndを更新したいという考えです。更新以外にも、これらの子 wnd のそれぞれに移動する必要がある右/左/上/下矢印キーなどのような機能がいくつかあります。

STLリストで利用可能/適格なすべての子ウィンドウのリストを維持しています(子ウィンドウ/ビューの作成中に行われます)。では、どこでキーの押下をキャプチャして、このリスト内のすべての子ウィンドウに渡すことができますか? 実装のいくつかの詳細も同様に高く評価されます。

いくつかの魂とインターネット検索の後、SendMessageToDescendants が役立つはずであるという結論に達しました。ここで: 1. SendMessageToDescendants をどこから呼び出すか 2. CView の OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) で必要なパラメーターを渡す方法 SendMessageToDescendants( UINT メッセージ、WPARAM wParam = 0、LPARAM lParam = 0、BOOL bDeep = TRUE、BOOL bOnlyPerm = FALSE );

4

2 に答える 2

0

親の子ウィンドウへの参照/ポインターのリストを維持していると仮定しているので、そのリストを単純にループして、各子ウィンドウの KeyDown メソッドを順番に呼び出すことはできませんか?

于 2010-10-19T19:37:27.993 に答える
0

キーの押下は入力フォーカスのあるウィンドウに行くと思うので、すべてのウィンドウにフォーカスがある場合は、他のウィンドウに再送信する必要があります。あなたが何をしているのかについて詳しく知らなくても、ここでは PostMessage が最善の策だと思います。

アップデート:

各ビューは、ユーザーからの WM_KEYDOWN と、すべてのビューに転送される偽の WM_KEYDOWN をどのように区別しますか? ソリューションを再考する必要があると思います-たとえば、WM_KEYDOWN では、各ビューは MainFrame::FakeKeyDown() のようなものを呼び出します。次に、FakeKeyDown はビューのリスト内のすべてのビューに対して View::OnFakeKeyDown() を呼び出し、ビューで必要なことは何でも行います。

于 2010-10-19T19:41:15.343 に答える