2010-10-19 50 views
2

我需要向我的MDI應用程序中的所有子窗口發送WM_KEYDOWN消息。這個想法是,一個特定的按鍵刷新一個窗口,我想刷新所有的孩子只需按一下按鍵。除了刷新之外,還會有更多這樣的功能,比如右/左/上/下箭頭鍵等等,這些功能需要到這些孩子的每一個孩子。如何將KeyDown消息發送給MDI中的所有子窗口

我正在維護STL列表中所有可用/符合條件的子窗口(在子窗口/視圖創建期間完成)的列表。現在,我可以在哪裏捕獲按鍵並將其傳遞給此列表中的所有子窗口?一些具體的實施也將受到讚賞。

經過一些靈魂和互聯網搜索,我得出結論,SendMessageToDescendants應該是有幫助的。現在: 1.凡調用SendMessageToDescendants從 2.如何通過CView中的onkeydown事件(UINT NCHAR, UINT nRepCnt,UINT NFLAGS)所需的PARAMS傳遞給 無效SendMessageToDescendants( UINT的消息,WPARAM wParam參數= 0, LPARAM lParam = 0, BOOL bDeep = TRUE, BOOL bOnlyPerm = FALSE );

+0

不知道標籤是否足夠好..爲了說明問題,我正在討論Microsoft Visual C++ 2008中的多文檔界面體系結構,並正在使用MFC編寫C++中的應用程序。 – user173438 2010-10-19 19:36:47

回答

0

我假設你正在維護父窗口中子窗口的引用/指針列表,所以你不能簡單地遍歷該列表,依次調用每個子窗口的KeyDown方法?

+0

KeyDown事件轉到視圖,而不是轉到MainFrame。所以不知道我怎樣才能調用每個視圖的KeyDown。如果我使用View的KeyDown自身中寫入的循環內的wnd指針列表調用它,它將成爲遞歸調用。在首次調用之後添加bools等來停止執行當然不是一個優雅的解決方案。 :) – user173438 2010-10-19 19:46:45

0

我認爲按鍵按下了輸入焦點的窗口,所以如果所有窗口都可以有焦點,則需要重新發送到其他窗口。我認爲PostMessage是你最好的選擇,但不知道你在做什麼。

UPDATE:

如何將每個View來自用戶的WM_KEYDOWN,並轉發到所有的意見,假WM_KEYDOWN區分?我想你需要重新考慮你的解決方案 - 例如,在WM_KEYDOWN,每個視圖將調用像MainFrame :: FakeKeyDown()。然後FakeKeyDown爲視圖列表中的每個視圖調用View :: OnFakeKeyDown(),並且您可以在視圖中執行任何您需要執行的操作。

+0

我所知道的是,SendMessageToDescendants將爲我完成這項工作。但我不太確定它的用法以及從哪裏來。 – user173438 2010-10-19 19:50:49

相關問題