Как отправить сообщение KeyDown всем дочерним окнам в MDI - PullRequest
2 голосов
/ 19 октября 2010

Мне нужно отправить сообщение WM_KEYDOWN всем дочерним окнам в моем приложении MDI.Идея состоит в том, что конкретное нажатие клавиши обновляет окно, и я хочу обновить все дочерние элементы одним нажатием клавиши.Помимо обновления, было бы еще несколько таких функций, как клавиши со стрелками вправо / влево / вверх / вниз и т. Д., Которые необходимо использовать для каждого из этих дочерних элементов.

Я веду список всех доступных /подходящие дочерние окна в списке STL (выполняется во время создания дочернего окна / представления).Теперь, где я могу зафиксировать нажатие клавиши и передать ее ВСЕМ дочерним окнам в этом списке?Некоторые особенности реализации будут также оценены.

После некоторых поисков в Интернете и в душе я пришел к выводу, что SendMessageToDescendants должен быть полезным.Теперь: 1. Где вызвать SendMessageToDescendants из 2. Как передать параметры, требуемые CK для OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags), чтобы аннулировать SendMessageToDescendants (сообщение UINT, WPARAM wParam = 0, LPARAM lParam = 0, LPaD = 0TRUE, BOOL bOnlyPerm = FALSE);

Ответы [ 2 ]

0 голосов
/ 19 октября 2010

Я думаю, что нажатие клавиши переходит в окно с фокусом ввода, поэтому, если все окна могут иметь фокус, вам нужно будет повторно отправить их в другие окна.Я думаю, что PostMessage - ваша лучшая ставка здесь, не зная намного больше о том, что вы делаете.

ОБНОВЛЕНИЕ:

Как каждый вид будет различать WM_KEYDOWNот пользователя и фальшивого WM_KEYDOWN, который пересылается во все виды?Я думаю, вам нужно переосмыслить свое решение - например, на WM_KEYDOWN каждый View будет вызывать что-то вроде MainFrame :: FakeKeyDown ().Затем FakeKeyDown вызывает View :: OnFakeKeyDown () для каждого представления в вашем списке представлений, и вы делаете все, что нужно, в представлении.

0 голосов
/ 19 октября 2010

Я предполагаю, что вы поддерживаете список ссылок / указателей на дочерние окна в родительском, так что вы не могли бы просто перебрать этот список, вызывая метод KeyDown каждого дочернего окна по очереди?

...