Система сообщений клавиатуры сообщений в очередь сообщений из основного потока, создавшего окно с фокусом. Фокус клавиатуры является свойством временного окна. Система разделяет клавиатуры среди всех окон на экране, переложив фокус клавиатуры, на руководство пользователя, из одного окна в другое. Окно, имеющий фокус клавиатуры получает (из очереди сообщений потока, который его создал) все клавиатуры сообщения до тех пор, пока фокус переводится в другое окно.
Поток можно вызывать функцию GetFocus , чтобы определить, какие из его окон (если таковой имеется) в настоящее время имеет фокус клавиатуры. Поток может дать фокус клавиатуры к одному из его окон, вызова функции SetFocus . Когда фокус клавиатуры изменяется от одного окна, система посылает сообщение WM_KILLFOCUS в окно, которое теряет фокус и затем отправляет сообщение WM_SETFOCUS в окно, которое получило фокус.
Концепция фокус клавиатуры имеет отношение к поведению активного окна. Активное окно является окном верхнего уровня, которого в настоящее время работает пользователь. Окно с фокусом клавиатуры является активное окно или дочернее окно активного окна. Таким образом пользователь может легко определить активного окна, система помещает его в верхней части Z-порядка и делает ее заголовок (если он имеется) и границы подчеркнул.
Пользователь может активировать окно верхнего уровня, щелкнув ее мышью, выбрав его с помощью клавиши alt + tab или сочетание клавиш alt + esc, или выбор из списка задач. Поток можно активировать окно верхнего уровня, используя функцию SetActiveWindow . Можно определить, активен ли окно верхнего уровня, созданный им с помощью функции GetActiveWindow.
Когда одно окно деактивируется и другой активирована, система посылает сообщение WM_ACTIVATE . Младшее слово параметра wParam равно нулю, если окно в настоящее время отключены и ненулевое значение, если она активирована. Когда процедура окна по умолчанию получает сообщение WM_ACTIVATE, он устанавливает фокус клавиатуры на активное окно.