Окт 16

Фокус ввода

Все приложения, работающие одновременно под управлением Windows, должны иметь возможность получать данные от клавиатуры. Если какое-то приложение имеет более одного окна, то клавиатура должна разделяться и между окнами в рамках одного приложения. Это разделение Windows реализует, используя понятие фокуса ввода. Фокус ввода (keyboard focus) — это временное свойство окна, которое означает, что все сообщения от клавиатуры направляются именно этому окну. В каждый момент времени из всех окон, имеющихся на экране, только одно окно может иметь фокус ввода.
Понятие фокуса ввода тесно связано с понятием активного окна. Активное окно — это окно верхнего уровня, с которым в данный момент работает пользователь. Система выделяет текст заголовка активного окна, поэтому отыскать его на экране довольно просто. Если активное окно минимизировано, то Windows выделяет текст заголовка на панели задач.
Фокусом ввода всегда владеет либо активное окно, либо одно из его дочерних окон. Часто дочерними окнами являются элементы управления — кнопки, переключатели, флажки, текстовые поля и списки, которые обычно размещаются в окне диалога. Элементы управления по-разному показывают, что они находятся в фокусе. Так, вокруг текста кнопки выводится точечная линия, а текстовое поле показывает, что оно получило фокус ввода, при помощи мигающего курсора.
Если активное окно минимизировано, то окна с фокусом ввода нет. Windows продолжает пересылать программе сообщения клавиатуры, но эти сообщения выглядят иначе, чем сообщения, направляемые активным неминимизированным окнам.
Обрабатывая сообщения WNLSETFOCUS и WM_KILLFOCUS, оконная процедура может определить текущий статус связанного с ней окна. Первое сообщение показывает, что окно получило фокус ввода, второе — что окно потеряло фокус ввода.
Для работы с фокусом ввода предусмотрены следующие функции:
Функция HWND SetFocus(HWND hWnd) устанавливает фокус ввода на окно hWnd, возвращая дескриптор окна, которое располагало фокусом до вызова функции.
Функция HWND GetFocus() возвращает дескриптор окна, имеющего фокус ввода в текущий момент.