
- •Уп. 2. Органы управления в приложениях Win32
- •2.1. Кнопки
- •2.1.1. Создание кнопок
- •2.1.2. Кнопки и сообщения
- •2.1.3. Флажки и переключатели
- •2.2. Статический орган управления
- •2.3. Полоса прокрутки
- •2.3.1. Общие сведения
- •2.3.2. Создание полосы прокрутки
- •2.3.3. Простейшие полосы прокрутки
- •2.3.4. Сообщения от полосы прокрутки
- •2.3.5. Управление полосой прокрутки
- •2.3.6. Пример обработки сообщений от полос прокрутки
- •2.3.7. Новые функции управления полосами прокрутки
- •2.3.8. Пример окна приложения с полосой просмотра
- •2.4. Редактор текста
- •2.4.1. Создание редактора
- •2.4.2. Сообщения для редактора текста
- •2.4.3. Сообщения от редактора текста
- •2.4.4. Пример работы с однострочным редактором
- •2.5. Списки строк
- •2.5.1. Создание списка
- •2.5.2. Сообщения от списка
- •2.5.3. Сообщения для списка
- •2.5.4. Пример работы со списком
- •2.6. Комбинированный список
- •2.6.1. Создание комбинированного списка
- •2.6.2. Коды извещения
- •2.6.3. Сообщения для комбинированного списка
- •2.6.4. Пример работы с комбинированным списком
- •Контрольные вопросы
- •Упражнения
- •Приложение 2
Контрольные вопросы
Чем отличаются окна определенных в Windows классов от обычных окон?
Какие аргументы обязательны при создании органов управления с помощью функции CreateWindow?
Каким образом родительское окно идентифицирует сообщения от органов управления?
Чем отличается создание полосы прокрутки от создания других органов управления?
Какие способы передачи сообщений окнам существуют и чем они отличаются?
В чем преимущество использования комбинированного списка по сравнению с обычным списком?
Каковы основные этапы создания органов управления?
Что будет, если при создании комбинированного списка вторым аргументом указать на некоторую строку?
Какие органы управления не используют идентификаторы?
Какие органы управления и в каком случае не используют дескрипторы окон?
Упражнения
Рабочую область при любых изменениях размеров окна приложения полностью занимает многострочный редактор с полосами просмотра и фокусом ввода.
В левом верхнем углу рабочей области окна приложения создать список. Справа от списка создать комбинированный список. Списки должны отображаться в окне приложения после нажатия правой кнопки мыши, а исчезать – после нажатия левой. При отображении списков фокус ввода установить в окне выбора.
В рабочей области окна приложения отобразить кнопку по умолчанию с надписью "Да" и обычную кнопку с надписью "Отмена" с идентификаторами соответственно ID_OK и ID_CANCEL. Сообщить пользователю о действиях над этими кнопками.
В окне приложения отобразить однострочный редактор, под ним список и еще ниже – кнопку с надписью "Да". При нажатии на кнопку записать в окно редактора текст о нажатии кнопки.
Окно содержит пустую строку ввода с надписью "Введите фамилию, имя и отчество", группу переключателей "Пол" из двух пунктов ("Мужчина" и "Женщина") и кнопку "Да". При нажатии на кнопку "Да" непустое содержимое строки ввода записать в заголовок группы. Затем при выборе пола сообщить новое содержимое заголовка группы, выбранный пол и вернуться к исходному состоянию.
В центре экрана отобразить окно без заголовка с фоном цвета трехмерных элементов. Окно содержит текст о правах на программный продукт и кнопки "Выход" и "Да". При нажатии кнопки "Выход" завершить работу, а кнопки "Да" – текст в окне заменить текстом о правилах работы, а кнопки заменить кнопками "Назад" и "Далее". При нажатии кнопки "Назад" вернуться к исходному состоянию.
В окне приложения создать временное окно с фоном цвета трехмерных элементов, содержащее группу вариантов взаимно исключающих действий и 3 кнопки: "Да", "Нет" и "Отмена".
В окне приложения отобразить кнопку "Клавиши отжаты". При нажатии любой клавиши мыши над рабочей областью окна эта кнопка исчезает и под курсором мыши появляется кнопка "Клавиша нажата". При отжатии клавиши мыши вернуться к исходному состоянию.
В рабочей области отображена кнопка с надписью "Нажмите правую клавишу мыши над рабочей областью". После нажатия правой клавиши мыши кнопка скрывается и отображается многострочный редактор с текстом "Нажмите левую клавишу мыши над рабочей областью". После нажатия левой клавиши мыши вернуться к исходному состоянию.
Создать окно с фоном трехмерных элементов без рамок. При нажатии левой клавиши мыши в только вам известной точке рабочей области и последующем перемещении курсора мыши правая и нижняя границы окна должны повторять это перемещение.
При запуске первого экземпляра приложения в окне приложения отобразить поле ввода пароля, а при запуске следующих экземпляров того же приложения запросить, действительно ли нужно запускать еще один экземпляр. Если "Да", запустить еще один экземпляр, но пароль больше не запрашивать.
Верхнюю часть рабочей области окна занимают два статических органа шириной в половину ширины рабочей области. Под ними в остальной части рабочей области расположены две вертикальные полосы прокрутки. Каждый статический орган отображает текущее значение позиции ползунка полосы, находящейся под ним.
Создать однострочный редактор, список и кнопки "Добавить" и "Изменить". При нажатии на кнопку "Добавить" содержимое редактора (если оно не пустое) добавить в список, очистить редактор и передать ему фокус ввода. При нажатии на кнопку "Изменить" выбранную строку списка (если она выбрана) записать в редактор, удалить из списка и передать фокус ввода редактору.
Создать однострочный редактор, список и кнопку "Найти". Изначально заполнить список набором строк. При нажатии на кнопку "Найти" содержимое редактора (если оно не пустое) использовать в качестве начальных букв поиска строки в списке и выбрать найденную строку.
В окне расположить группу переключателей, группу флажков, кнопки "Да" и "Нет", причем кнопка "Да" выбирается по умолчанию. Если нажата кнопка "Да", то сообщить о состоянии переключателей и флажков. Если нажата кнопка "Нет", то завершить работу.
В рабочей области с фоном цвета кнопок расположить группу флажков, способных находиться в трех состояниях, с надписями слева и кнопки "Да" и "Выход". Кнопка "Да" выбирается по умолчанию. После нажатия кнопки "Выход" завершить работу.
Окно в центре экрана с фоном цвета трехмерных элементов содержит переключатели, имитирующие работу светофора. Названия цветов светофора расположены слева от переключателей. При нажатии на переключатель сообщить название его цвета.
В рабочей области окна перечислить названия изучаемых в семестре дисциплин и пометить названия изучаемых сегодня дисциплин. Выделить среди изучаемых сегодня дисциплин те, по которым нет экзамена.
В центре экрана отобразить окно без рамок, в верхней части которого отобразить текст "Анкетные данные служащего", ниже – поле ввода фамилии, имени и отчества, под которым группы переключателей о поле и образовании. Окно также содержит кнопки "Запись", "Очистка" и "Выход".
В окне приложения отобразить два статических органа с текстами 'Труппа 1" и "Группа 2". При нажатии левой клавиши мыши над первым органом должна появиться кнопка с надписью "Кнопка 1", а при нажатии над вторым органом – "Кнопка 2". Любая кнопка при нажатии должна исчезнуть.
Комбинированный список изначально заполнить произвольными различными строками. Рядом расположить кнопку "Вверх". Если выбрать строку и нажать кнопку "Вверх", то эта строка должна переместиться вверх на одну позицию в списке. Если эта строка уже первая в списке, то сообщить об этом и заблокировать кнопку.
Создать строку ввода с числом 0 и справа от нее – маленькую вертикальную полосу прокрутки. Под ними кнопки "Выход" и "Да". При нажатии на верхнюю кнопку полосы число в строке ввода увеличить на единицу, а на нижнюю кнопку – уменьшить на единицу. При нажатии кнопки "Да" отобразить содержимое строки ввода, а кнопки "Выход" – завершить работу.
Окно приложения без заголовка с рамкой стиля кнопки сообщает о форматировании гибкого диска и содержит кнопку "Прекратить". При попытке нажать на кнопку изменить текст сообщения и переместить кнопку в другое место.
Создать группу флажков с возможными вариантами данных о студенте и кнопку "Да". После нажатия на кнопку сообщить об установленных данных.
Создать два списка, между ними расположить кнопки "Переместить»" и "«Переместить". Левый список должен быть изначально заполнен списком строк. Если выбрать строку и нажать одну из кнопок, то выбранная строка должна переместиться слева направо или наоборот.