2

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

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

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

4

2 回答 2

0

我认为按键会转到具有输入焦点的窗口,因此如果所有窗口都具有焦点,则需要重新发送到其他窗口。我认为 PostMessage 是您在这里最好的选择,而不知道更多关于您在做什么。

更新:

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

于 2010-10-19T19:41:15.343 回答
0

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

于 2010-10-19T19:37:27.993 回答