Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум «Основы разработки приложений Windows» книга 2.DOC
Скачиваний:
91
Добавлен:
10.05.2014
Размер:
827.9 Кб
Скачать

Работа 5. Измерение временных характеристик программы с помощью мультимедийного таймера

Включите в предыдущую программу измерение времени выполнения одного из ее фрагментов, например, функции OnCre­ate(). С этой целью вызовите функциюtimeGetTime()дважды, в самом начале изучаемого фрагмента и перед его завершением, сохранив в глобальной переменной разность значений, возвращаемых этой функцией. Выведите эту разность в виде текста в главное окно приложения, дополнив его обозначением единиц времени (миллисекунд). Выполните многократный (5 – 10 раз) прогон программы, сравните и проанализируйте полученные результаты.

Работа 6. Вывод движущихся изображений с синхронизацией от системного таймера (индивидуальное задание b)

Разработайте программу, в которой в главном окне черного цвета размером 256256 пикселов по траектории, указанной в задании, непрерывно перемещается залитая ярким цветом фигура (например, круг диаметром 50 – 60 пикселов).

В функции OnCreate()создайте таймер с минимально возможным периодом (50 мс), а также яркую цветную кисть для заливки движущейся фигуры.

В функции OnTimer()вычисляйте текущие координаты фигуры, изменяя их в соответствии с заданием; после этого вызовом функцииInvalidateRect()инициируйте посылку в главное окно сообщенияWM_PAINT.

В функции OnPaint()выводите в окно фигуру, используя текущие значения координат.

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

Работа 7. Повышение качества движущихся изображений с помощью совместимой памяти

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

Состав функции OnCreate():

  • получение контекста окна (функция GetDC());

  • создание пустой совместимой памяти объемом 256256 пикселов (функцияCreateCompatibleBitmap());

  • создание совместимого с окном контекста совместимой памяти (функция CreateCompatibleDC());

  • выбор совместимой памяти в совместимый контекст (макрос SelectBitmap());

  • выбор в контекст совместимой памяти прозрачного пера и яркой кисти для рисования изображения в этой памяти;

  • образование структурной переменной типа RECT, описывающей размер совместимой памяти, и ее инициализация;

  • установка таймера с периодом 50 мс;

  • освобождение контекста окна (функция ReleaseDC()).

Состав функции OnTimer():

  • вычисление текущих координат фигуры в соответствии с заданием;

  • закрашивание совместимой памяти черным цветом (функция FillRect());

  • рисование в совместимой памяти фигуры с использованием текущих значений координат;

  • вызов функции InvalidateRect(), инициирующей посылку в главное окно сообщенияWM_PAINTбез перерисовки фона (последний параметр функцииInvalidateRect() должен быть равенFALSE).

Состав функции OnPaint():

  • получение контекста окна (функция BeginPaint());

  • копирование совместимой памяти в окно (функция BitBlt();

  • освобождение контекста окна (функция EndPaint()).

Убедитесь в повышении качества изображения (исчезло его мерцание), хотя скорость перемещения изображения осталась, естественно, низкой.