Читайте также:
|
|
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
Лабораторная работа №8
Цель. Получение навыков разработки приложений на языке программирования С++ в системе программирования RAD (Rapid Application Development) Studio for Microsoft Windows.
Тема. Обработка сообщений Windows.
Описание приложения. Приложение состоит из двух областей: рабочей области и области элементов управления.
В рабочей области приложения расположена траектория. По траектории перемещается фигура.
Пользователь имеет возможность:
а) сохранять фигуру в буфере обмена.
б) восстанавливать фигуру из буфера обмена.
Задание. Взять программу из лабораторной работы № 3 и расширить ее следующими средствами:
- предусмотреть возможность сохранения фигуры в буфере обмена и восстановления фигуры из буфера обмена.
- с помощью класса Exception сделать порождение и обработку исключительных ситуаций на файловые операции.
Требования:
1. Операции с буфером обмена выполнять в текстовом формате.
2. Предусмотреть перехват сообщения WM_DRAWCLIPBOARD (изменение содержимого буфера обмена). Если в буфер обмена записывается фигура, то нужно отобразить новое содержимое буфера в поле редактирования фигуры и новую фигуру в окне прорисовки.
3. Необходимо использовать правила именования идентификаторов.
Варианты заданий. Отсутствуют.
Содержание отчета
Титульный лист.
Задание.
Исходный текст программы.
Результаты работы программы (копия экрана приложения).
Защита лабораторной работы.
Студент демонстрирует созданный программный продукт. Необходимо заранее подготовить аргументы, показывающие лучшие особенности программы и качество разработки.
Студент демонстрирует степень выполнения задания.
Студент демонстрирует авторство путем ответов на вопросы по исходному тексту программы.
Оценка результатов.
Максимальное количество баллов за программу – 10.
Критерии оценки программы
Задание | Оценка |
Предусмотрен перехват события WM_DRAWCLIPBOARD | |
Всего |
Корректировочные коэффициенты при оценке программы
Степень выполнения | Полученные результаты | Коэффициент |
Нет исходного текста программы | 0,0 | |
Есть исходный текст программы, но нет чистой трансляции | 0,2 | |
Лабораторная работа сделана не самостоятельно | 0,2 | |
Имеются серьезные недоработки | 0,5-0,8 | |
Имеются погрешности в работе программы | 0,9 | |
Программа работает верно. | 1,0 |
Если при выполнении работы получены оригинальные решения, то по усмотрению преподавателя могут быть добавлены поощрительные баллы.
Методические указания.
При занесении любой программой в буфер обмена каких-то данных генерируется сообщение Windows WM_DRAWCLIPBOARD, не имеющее параметров. Это сообщение поступает только в те окна, которые включены в цепочку (список) окон просмотра буфера обмена (рис. 1). Чтобы получать сообщения от буфера обмена, наша программа должна заявить операционной системе об этом и если вдруг настанет такой момент, когда мы больше не хотим получать сообщения от буфера обмена (например: закрытие приложения), мы должны отказаться вызовом стандартной функции.
Организация рассылки сообщения WM_DRAWCLIPBOARD
Рис. 1
Включить своё окно в цепочку окон просмотра буфера обмена можно функцией SetClipboardViewer:
HWND SetClipboardViewer(HWND hWndNewViewer);Параметр hWndNewViewer является дескриптором окна, включаемого в цепочку. Функция возвращает дескриптор следующего окна в цепочке. Дело в том, что если мы включили свою форму в цепочку окон просмотра буфера обмена, то должны обеспечить обработку сообщений WM_DRAWCLIPBOARD и WM_CHANGECBCHAIN. Сообщение WM_CHANGECBCHAIN генерируется при изменениях в цепочке окон просмотра буфера. В конце обработчиков этих сообщений надо функцией SendMessage передать то же сообщение следующему окну цепочки, дескриптор которого вам вернула функция SetClipboardViewer.
Перед завершением приложения надо исключить своё окно из цепочки. Это делается функцией ChangeClipboardChain:
BOOL ChangeClipboardChain(IN HWND hWndRemove, IN HWND hWndNewNext);Параметр hWndRemove - дескриптор удалённого окна, а параметр hWndNewNext - дескриптор следующего окна в цепочке.
Описание карты сообщений должно содержать информацию, по крайней мере, о двух сообщениях: WM_DRAWCLIPBOARD и WM_CHANGECBCHAIN. Оба сообщения не нуждаются в параметрах, поэтому в качестве имени структуры параметра необходимо использовать структуры TWMNoParams.
Вызов функции SetClipboardViewer целесообразно включить в конструктор формы или в обработчик события формы OnCreate. Вызов функции ChangeClipboardChain можно сделать в деструкторе формы или в обработчике события OnDestroy.
Дата добавления: 2015-12-08; просмотров: 74 | Нарушение авторских прав