如何将KeyDown消息发送到MDI中的所有子窗口

时间:2010-10-19 19:33:24

标签: mfc mdi mdichild

我需要向我的MDI应用程序中的所有子窗口发送WM_KEYDOWN消息。这个想法是一个特定的按键刷新一个窗口,我想只需按一下按键即可刷新所有的孩子。除了刷新之外,还有更多这样的功能,如右/左/上/下箭头键等,需要去每个儿童组。

我正在维护STL列表中所有可用/符合条件的子窗口列表(在子窗口/视图创建期间完成)。现在,我在哪里可以捕获按键并将其传递给此列表中的所有子窗口?还将赞赏实施的一些细节。

经过一些灵魂和互联网搜索后,我得出结论,SendMessageToDescendants应该会有所帮助。现在: 1.从哪里调用SendMessageToDescendants 2.如何传递CView的OnKeyDown所需的参数(UINT nChar, UINT nRepCnt,UINT nFlags)to void SendMessageToDescendants(    UINT消息,    WPARAM wParam = 0,    LPARAM lParam = 0,    BOOL bDeep = TRUE,    BOOL bOnlyPerm = FALSE );

2 个答案:

答案 0 :(得分:0)

我假设您正在维护父窗口中子窗口的引用/指针列表,所以您不能简单地遍历该列表,依次调用每个子窗口的KeyDown方法吗?

答案 1 :(得分:0)

我认为按键会按下输入焦点进入窗口,因此如果所有窗口都有焦点,则需要重新发送到其他窗口。我认为PostMessage是你最好的选择,不知道你在做什么。

<强>更新

每个视图如何区分用户的WM_KEYDOWN和转发给所有视图的假WM_KEYDOWN?我认为你需要重新考虑你的解决方案 - 例如,在WM_KEYDOWN,每个View都会调用类似MainFrame :: FakeKeyDown()的东西。然后,FakeKeyDown为视图列表中的每个视图调用View :: OnFakeKeyDown(),并在视图中执行任何操作。