
- •Глава 8 Дочерние окна управления
- •Класс кнопок
- •Создание дочерних окон
- •Сообщения дочерних окон родительскому окну
- •Сообщения родительского окна дочерним окнам
- •Нажимаемые кнопки
- •Переключатели
- •Окна группы
- •Изменение текста кнопки
- •Видимые и доступные кнопки
- •Кнопки и фокус ввода
- •Дочерние окна управления и цвета
- •Системные цвета
- •Цвета кнопок
- •Сообщение wm_ctlcolorbtn
- •Кнопки, определяемые пользователем
- •Класс статических дочерних окон
- •Класс полос прокрутки
- •Программа colors1
- •Интерфейс клавиатуры, поддерживаемый автоматически
- •Введение новой оконной процедуры
- •Закрашивание фона
- •Окрашивание полос прокрутки и статического текста
- •Класс редактирования
- •Стили класса редактирования
- •Коды уведомления управляющих окон редактирования
- •Использование управляющих окон редактирования
- •Сообщения управляющему окну редактирования
- •Класс окна списка
- •Стили окна списка
- •Добавление строк в окно списка
- •Выбор и извлечение элементов списка
- •Получение сообщений от окон списка
- •Простое приложение, использующее окно списка
- •Список файлов
- •Использование атрибутов файлов
- •Упорядочивание списков файлов
- •Утилита Head для Windows
Переключатели
Переключатели (radio buttons) похожи на флажки, но их форма не квадратная, а круглая. Жирная точка внутри кружка показывает, что переключатель помечен. Переключатель имеет стиль окна BS_RADIOBUTTON или BS_AUTORADIOBUTTON, но последний используется только в окнах диалога. В окнах диалога группы переключателей, как правило, используются для индикации нескольких взаимоисключающих опций. В отличие от флажков, если повторно щелкнуть на переключателе, его состояние не изменится.
При получении сообщения WM_COMMAND от переключателя, необходимо отобразить его отметку, отправив сообщение BM_SETCHECK с параметром wParam, равным 1:
SendMessage(hwndButton, BM_SETCHECK, 1, 0);
Для всех остальных переключателей этой группы можно отключить контрольную метку, послав сообщение BM_SETCHECK с параметром wParam, равным 0:
SendMessage(hwndButton, BM_SETCHECK, 0, 0);
Окна группы
Окно группы (group boxes) — стиль BS_GROUPBOX — является исключением в классе кнопок. Оно не обрабатывает ни сообщения от клавиатуры, ни сообщения от мыши, оно не посылает своему родительскому окну сообщений WM_COMMAND. Окно группы представляет собой прямоугольную рамку с текстом вверху. Окна групп часто используются для того, чтобы в них размещать другие кнопки управления.
Изменение текста кнопки
Вы можете изменить текст кнопки (или любого другого окна) с помощью вызова функции SetWindowText :
SetWindowText(hwnd, pszString);
где hwnd — это описатель окна, в котором изменяется текст, а pszString — это указатель на оканчивающуюся нулем строку. Для обычного окна этот текст — текст строки заголовка. Для кнопок управления — это текст, который выводится на экран вместе с кнопкой.
Вы также можете получить текущий текст окна:
iLength = GetWindowText (hwnd, pszBuffer, iMaxLength);
Параметр iMaxLength задает максимальное число символов для копирования в буфер, который определяется указателем pszBuffer. Возвращаемым значением функции является длина скопированной строки. Вы можете подготовить вашу программу для приема строки конкретной длины, вызвав сначала функцию:
iLength = GetWindowTextLength(hwnd);
Видимые и доступные кнопки
Для получения ввода от мыши и от клавиатуры дочернее окно должно быть одновременно видимым (отображенным на экране) и доступным (разрешенным) для ввода. Если дочернее окно является видимым, но недоступным, Windows выводит на экран текст окна не черным, а серым цветом.
Если при создании дочернего окна, вы не включили в класс окна идентификатор WS_VISIBLE, то дочернее окно не появится на экране до тех пор, пока вы не вызовете функцию ShowWindow:
ShowWindow (hwndChild, SW_SHOWNORMAL);
Если вы включили в класс окна идентификатор WS_VISIBLE, то вам нет необходимости вызывать функцию ShowWindow. Однако, с помощью вызова этой функции можно скрыть дочернее окно:
ShowWindow (hwndChild, SW_HIDE);
Определить, является ли дочернее окно видимым, можно, вызвав функцию:
IsWindowVisible (hwndChild);
Вы также можете сделать дочернее окно доступным или недоступным для ввода. По умолчанию дочернее окно доступно. Вы можете сделать его недоступным с помощью вызова функции:
EnableWindow (hwndChild, FALSE);
Для кнопок этот вызов приводит к изображению текстовой строки кнопки серым цветом. Кнопка перестает реагировать на ввод с клавиатуры и мыши. Это лучший способ продемонстрировать, что какая-то опция, соответствующая кнопке, в данный момент недоступна.
Вы можете вновь сделать дочернее окно доступным, вызвав функцию:
EnableWindow (hwndChild, TRUE);
Определить, доступно или нет дочернее окно, можно с помощью функции:
IsWindowEnabled (hwndChild);