Страница 2 из 17 Фокус и активизация клавиатуры Windows посылает сообщения клавиатуры в очередь сообщений активного потока, который создал окно с фокусом клавиатуры. Фокус клавиатуры (keyboard focus) - временное свойство окна. Windows дает возможность совместно использовать клавиатуру всем окнам на экране, при помощи перемещения фокуса клавиатуры по указанию пользователя из одного окна в другое. Окно, которое имеет фокус клавиатуры, принимает (из очереди сообщений потока, который создал его) все сообщения клавиатуры, пока фокус не перейдет к другому окну. Поток может вызывать функцию GetFocus, чтобы определить, которое из его окон (если есть в наличии) в настоящее время имеет фокус клавиатуры. Поток может дать фокус клавиатуры одному из своих окон, при помощи вызова функции SetFocus. Когда фокус клавиатуры меняет одно окно на другое, система отправляет сообщение WM_KILLFOCUS окну, которое потеряет фокус, а затем отправляет сообщение WM_SETFOCUS окну, которое получает фокус. Концепция фокуса клавиатуры связывается с понятием активного окна. Активное окно (active window) - окно верхнего уровня, с которым пользователь в настоящее время работает. Окно с фокусом клавиатуры является или активным окном, или дочерним окном активного окна. Таким образом, чтобы пользователь мог легко идентифицировать активное окно, система размещает его сверху в Z-последовательности и делает выделенными область его заголовка (если оно является единственным) и рамку. Пользователь может активизировать окно верхнего уровня, щелкнув по нему мышью, выбрать его, используя комбинацию клавиш ALT+TAB или ALT+ESC, или выбрать его, если оно в Списке Задач (Task List). Поток может активизировать окно верхнего уровня, используя функцию SetActiveWindow. Он может определить, является ли окно верхнего уровня, которое он создал активным, используя функцию GetActiveWindow. Когда одно окно деактивизируется, а другое активизируется, Windows сначала отправляет сообщение WM_ACTIVATE деактивизируемому, а затем активизируемому окну. Младшее слово параметра wParam равно нулю, если окно деактивизируется, и отличается от нуля, если оно активизируется. Когда заданная по умолчанию оконная процедура принимает сообщение WM_ACTIVATE, она устанавливает фокус клавиатуры в активном окне. |