Стиль WS_GROUP

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

Приложение может использовать стиль WS_GROUP для того, чтобы изменить этот заданный по умолчанию режим работы. Стиль отмечает начало группы органов управления. Если орган управления в группе имеет фокус ввода данных, когда пользователь начинает нажимать клавиши со стрелками, фокус остается в группе. Вообще, первый орган управления в группе должен иметь стиль WS_GROUP, а все другие органы управления в группе не должны иметь этого стиля. Все органы управления в группе должны быть непрерывны, то есть, они должны быть созданы последовательно без промежуточных элементов управления.

Когда пользователь нажимает клавишу со стрелкой, система сначала выясняет, обрабатывает ли текущий орган управления, имеющий фокус ввода данных, эти клавиши направления. Система отправляет сообщение WM_GETDLGCODE органу управления и, если он возвращает значение DLGC_WANTARROWS, передает клавишу в орган управления. В противном случае, система использует функцию GetNextDlgGroupItem, чтобы выяснить следующий орган управления в группе.

Функция GetNextDlgGroupItem ищет орган управления в порядке (или обратном порядке), как они создавались. Если пользователь нажимает клавишу RIGHT (вправо) или DOWN (вниз), GetNextDlgGroupItem возвращает следующий орган управления, если этот орган управления не имеет стиля WS_GROUP. Или же, функция изменяет порядок поиска на противоположный и возвращает первый орган управления, который имеет стиль WS_GROUP. Если пользователь нажимает клавишу LEFT (влево) или UP (вверх), возвращенное значение функцией - предыдущий орган управления, если текущий орган управления ранее не имел стиля WS_GROUP. Если текущий орган управления имеет этот стиль, функция изменяет порядок поиска на противоположный, определяет местонахождение первого органа управления, имеющего стиль WS_GROUP и возвращает орган управления, который непосредственно предшествует обнаруженному органу управления.

Если поиск следующего органа управления в группе встречает окно со стилем WS_EX_CONTROLPARENT, система рекурсивно ищет потомков окна.

Как только система получает следующий или предыдущий орган управления, она отправляет ему сообщение WM_GETDLGCODE, чтобы выяснить тип органа управления. Система затем перемещает фокус ввода данных в орган управления, если это не статический элемент управления. Если орган управления - автоматическая "радио" кнопка, система отправляет ей сообщение BM_CLICK. Приложение может также использовать GetNextDlgGroupItem, чтобы определить местонахождение органа управления в группе.

Обычно, первый орган управления в группе объединяет WS_GROUP и WS_TABSTOP стили так, чтобы пользователь мог двигаться от группы к группе, используя клавишу TAB. Если группа содержит "радио" кнопки, приложение должно применить стиль WS_TABSTOP только к первому органу управления в группе.

Система автоматически перемещает стиль тогда, когда пользователь перемещается между органами управления в группе. Это гарантирует то, что фокус ввода данных будет всегда в последний раз выбранном органе управления, когда пользователь перемещался в группе, используя клавишу TAB.

 

Назад в оглавление
На главную страницу

Hosted by uCoz