в правильности функционирования кнопок максимизации
1) Создать и выполнить приложение, убедившись в правильности функционирования кнопок максимизации и минимизации окна.
2) Передвинуть окно в другое место экрана.
3) Плавно изменить высоту и ширину окна с помощью мыши.
4) Закрыть приложение.
5) Изменить исходный текст приложения, заменив заголовок окна на “Hello, Hello !”. Убедиться в появлении окна с новым заголовком.
Создать приложение и убедиться в его работоспособности.
3. Использование класса TFrameWindow для создания главного окна
Класс TFrameWindow является производным от TWindow и обеспечивает функционирование главного окна приложения.
1) Создать и выполнить приложение. Обратите внимание! Вместо заголовка “Hello, Windows !”, заданного конструктором TMyApp, окно имеет заголовок “Hello, Hello !”. Это результат работы переопределенной виртуальной функции TMyApp::InitMainWindow, которая была вызвана после конструктора и изменила текст заголовка на “Hello, Hello !”.
2) Измените тексты заголовков, используемые конструкторами TMyApp и TFrameWindow.
3) Измените статус доступа к членам класса TMyApp на protected или private. Убедитесь, что появятся сообщения об ошибках компиляции, так как в функции OwlMain производится обращение к теперь уже недоступному конструктору TMyApp.
4) Опишите конструктор TMyApp вне класса, не забыв добавить при его описании оператор привязки к классу TMyApp. Убедитесь в работоспособности приложения.
5) Опишите член-функцию InitMainWindow вне класса. Проверьте работоспособность приложения.
1) Создать приложение с вариантом A функции InitMainWindow. Проверьте работоспособность приложения.
2) Создать приложение с вариантом A написания функции инициализации, но с другими значениями элементов X,Y,W,H структуры Attr.
3) Создать приложение с вариантом B написания функции InitMainWindow. Убедиться, что окно размещается в центре экрана.
1) Создать и выполнить приложение. Поэкспериментировать с приложением, нажимая кнопки мыши в его окне.
2) Измените аргументы в вызовах функции MessageBox. Убедитесь в изменении внешнего вида панели сообщения.
3) Закомментируйте строку EV_VM_RBUTTONDOWN в таблице элементов отклика. Объясните изменившееся поведение приложения.
1) Создать и выполнить приложение. Поэкспериментировать с приложением, передвигая курсор мыши в рабочей зоне окна и нажимая на ее левую клавишу.
2) Переписать текст программы, используя для вывода текста другие цвета, например Black, Gray, LtCyan, LtGray, TtGreen, LtMagenta, LtRed, LtYellow, White.
3) Измените текст приложения, формируя цвет текста, как совокупность случайных значений его компонент - красного, зеленого и голубого. Для этого замените
TColor forecolor(TColor::LtBlue) на
TColor forecolor(random(255), random(255), random(255)).
Для использования random в начало программы вставьте
#include <stdlib.h>
1) Создать и выполнить приложение. Проверить его работу, изменяя размеры прикладного окна.
2) Изменить функционирование Paint, поместив в ее тело операторы
pk.x+=25;
pk.y+=15;
Поэкспериментируйте с приложением и объясните поведение прикладного окна.
1) Создать и выполнить приложение.
2) Удалите вызов функции Invalidate в одной из функций отклика. Объясните изменения в логике работы приложения.
3) Создайте дополнительное меню Color с командами Black и Red, которые должны изменять цвет выводимых на экране фигур.
8. Управляющие компоненты Windows
Рассмотрим несколько управляющих компонент Windows, облегчающих диалог с приложением.
Первый компонент - это линейка прокрутки. Она может быть расположена в окне приложения и представляет собой вертикальную или горизонтальную полосу с ползунком. Ползунок можно передвинуть, зацепив его указателем мыши и перетащив вдоль полосы прокрутки.
Линейка создается как объект класса TScrollBar в конструкторе окна приложения. Конструктору TScrollBar передаются координаты и размеры создаваемой линейки, а так же тип линейки - горизонтальная или вертикальная.
Покажем, как использовать в приложении вертикальную линейку прокрутки.
Во время перемещения ползунка вертикальная линейка генерирует уведомляющие сообщения WM_VSCROLL. Вы можете перехватить и обработать эти сообщения, объявив в классе-владельце такой линейки функцию отклика EvVScroll и дополнив таблицу отклика класса макросом EV_WM_VSCROLL. Функция будет вызываться при изменении положения ползунка на линейке.
При создании линейки присвойте адрес сконструированного объекта указателю. В результате Вы получите доступ к разнообразному набору функций объекта. К примеру, появится возможность позиционировать ползунок из программы, получать позицию ползунка и изменять масштаб линейки ( по умолчанию позиция ползунка на линейке изменяется от 0 до 100).
Все сказанное выше справедливо и для горизонтальной линейки прокрутки, но для реакции на ее сообщения требуется функция EvHScroll и макрос EV_WM_HSCROLL.
Теперь уделим внимание другому компоненту визуального интерфейса Windows - кнопке.
Кнопка может быть расположена в окне приложения и представляет собой прямоугольник с надписью. Кнопка реагирует на щелчки мышью выдачей уведомляющего сообщения. Она создается в конструкторе окна приложения, как объект класса TButton.
Конструктору TButton передается адрес объекта-окна, в котором Вы хотите разместить кнопку, текст надписи на кнопке, ее координаты и размер. Конструктору также передается константный идентификатор кнопки. Данный идентификатор совпадает с идентификатором уведомляющего сообщения, генерируемого кнопкой при нажатии.
Реакция на нажатия кнопки реализуется аналогично реакции на выбор команды меню: Вы описываете функцию реакции (имя функции произвольное) на нажатия кнопки и помещаете в таблицу реакции макрос
EV_COMMAND(BUTTON_ID,UserName)
с идентификатором кнопки и именем функции отклика.
Приложение может иметь несколько кнопок с различными идентификаторами и для каждой кнопки нужно создать свою функцию отклика и добавить элемент в таблицу реакций.
Если Вы хотите реагировать только на нажатия кнопки, никак не изменяя ее характеристик, то присваивать указателю адрес созданного объекта-кнопки не требуется.
1) Создать исследовать работу приложения.
2) Изменить вертикальную линейку прокрутки на горизонтальную.
3) Исследовать работу приложения, закомментировав вызов UpdateWindow в теле EvVScroll.
4) Исследовать работу приложения, удалив вызов функции InvalidateRect.
5) Измените таблицу реакции, удалив в ней EV_WM_VSCROLL. Объясните поведение приложения.
1) Создать приложение и исследовать его работу.
2) Изменить аргументы конструктора (текст кнопки, координаты, размер и т. д.) TButton одной из кнопок.
3) Исследуйте работу приложения, закомментировав вызов Invalidate в одной из функций отклика.
9. Ввод и редактирование текста
Данная тема будет посвящена панелям ввода и редактирования - одной из популярнейших компонент Windows.
Использование панели ввода и редактирования текста позволяет приложению ввести и при необходимости отредактировать одну или несколько строк текста.
Панель редактирования создается, как объект класса TEdit и может быть размещена в любом прикладном окне. Данная панель представляет собой стандартный текстовый редактор Windows, в котором доступны все операции редактирования текста - вставка и замена текста, удаление символов и работа с буфером обмена Windows.
Различают два типа панелей редактирования - однострочная и многострочная.
Создание панелей редактирования и размещение их в окне приложения осуществляются аналогично созданию кнопок и полос прокрутки. Объект создается из класса TEdit. Конструктору объекта передается идентификатор окна, в котором будет размещена панель, константный идентификатор панели, текст, который будет помещен в редактор и координаты панели в окне приложения. Дополнительно конструктору передается стиль панели редактирования: TRUE, если создается многострочная панель, FALSE, если панель - однострочная (см раздел 10.7).
1) Создайте и исследуйте приложение.
2) Поместите в окно приложения еще одну панель редактирования. После нажатия на кнопку приложение должно выводить в свое окно строки из первой и второй панели редактирования.
1) Сравните листинги программ, приводимые в 9.2.1 и в 9.1.1, уделив особое внимание на различия в конструировании однострочной и многострочной панелей редактирования.
2) Создайте и выполните приложение.
3) Создайте элемент меню прикладного окна, вызывающий однострочный или многострочный элемент редактирования.