- •Лабораторный практикум «Основы разработки приложений Windows» Книга 2
- •Часть 1. Теоретические сведения4
- •Часть 2. Лабораторный практикум73
- •Часть 1 Теоретические сведения
- •1. Основы архитектурЫ защищенного режима Регистры процессора
- •Адресация памяти
- •2. Логические шрифты Создание логических шрифтов
- •Вывод на экран текстовых строк
- •3. Таймеры Windows Организация и обслуживание таймеров
- •Мультимедийные таймеры
- •Измерение интервалов времени
- •Организация периодического процесса
- •Задание однократного интервала времени
- •4. Дочерние окна Создание и использование дочерних окон
- •Окна предопределенных классов в главном окне
- •5. Вывод растровых изображений
- •Процедура вывода растрового изображения
- •Компоновка составных изображений
- •6. Обслуживание файлов в 32-разрядных приложениях Windows
- •Базовые операции с файлами Открытие и создание файла
- •Запись и чтение файла
- •Файлы, проецируемые в память
- •7. Процессы и потоки
- •Создание дочернего процесса
- •Создание дочернего потока
- •Синхронизация потоков Общие характеристики объектов Windows
- •Синхронизация с помощью состояний потока
- •Синхронизация с помощью событий
- •Критические секции и защита данных
- •8. Библиотеки динамической компоновки
- •Часть 2 Лабораторный практикум Работы лабораторного практикума Работа 1. Создание логических шрифтов
- •Работа 2. Таймеры Windows(индивидуальное задание а)
- •Работа 3. Дочернее окно в главном окне приложения
- •Работа 4. Вывод растровых изображений с использованием совместимой памяти
- •Работа 5. Измерение временных характеристик программы с помощью мультимедийного таймера
- •Работа 6. Вывод движущихся изображений с синхронизацией от системного таймера (индивидуальное задание b)
- •Работа 7. Повышение качества движущихся изображений с помощью совместимой памяти
- •Работа 8. Движение изображения по фоновому рисунку
- •Работа 9. Работа с файлами (индивидуальное задание c)
- •Работа 10. Стандартные диалоги Windows для работы с файлами
- •Работа 11. Проецирование файла в память
- •Работа 12. Потоки (индивидуальное задание d)
- •Работа 13. Синхронизация потоков с помощью событий
- •Работа 14. Защита данных с помощью критической секции
- •Работа 15. Библиотеки динамической компоновки
- •Работа 16. Передача параметров в функции dll-библиотек
- •Индивидуальные задания лабораторного практикума
- •Задание c2.Массив записываемых в файл данных должен представлять собой последовательный ряд из 2000 целых четных чисел.
- •Лабораторный практикум «Основы разработки приложений Windows» Книга 2
Работа 5. Измерение временных характеристик программы с помощью мультимедийного таймера
Включите в предыдущую программу измерение времени выполнения одного из ее фрагментов, например, функции OnCreate(). С этой целью вызовите функциюtimeGetTime()дважды, в самом начале изучаемого фрагмента и перед его завершением, сохранив в глобальной переменной разность значений, возвращаемых этой функцией. Выведите эту разность в виде текста в главное окно приложения, дополнив его обозначением единиц времени (миллисекунд). Выполните многократный (5 – 10 раз) прогон программы, сравните и проанализируйте полученные результаты.
Работа 6. Вывод движущихся изображений с синхронизацией от системного таймера (индивидуальное задание b)
Разработайте программу, в которой в главном окне черного цвета размером 256256 пикселов по траектории, указанной в задании, непрерывно перемещается залитая ярким цветом фигура (например, круг диаметром 50 – 60 пикселов).
В функции OnCreate()создайте таймер с минимально возможным периодом (50 мс), а также яркую цветную кисть для заливки движущейся фигуры.
В функции OnTimer()вычисляйте текущие координаты фигуры, изменяя их в соответствии с заданием; после этого вызовом функцииInvalidateRect()инициируйте посылку в главное окно сообщенияWM_PAINT.
В функции OnPaint()выводите в окно фигуру, используя текущие значения координат.
Убедитесь в невысокой скорости перемещения изображения и в наличии у него характерного мерцания. Сохраните отлаженную программу, чтобы иметь возможность сравнить ее со следующей.
Работа 7. Повышение качества движущихся изображений с помощью совместимой памяти
Выполните модификацию предыдущей программы так, чтобы изменение изображения выполнялось не непосредственно в главном окне, а в совместимой памяти с последующим копированием этой памяти в главное окно. Содержательный алгоритм программы заключен в функциях обработки сообщений WM_CREATE,WM_TIMERиWM_PAINT.
Состав функции OnCreate():
получение контекста окна (функция GetDC());
создание пустой совместимой памяти объемом 256256 пикселов (функцияCreateCompatibleBitmap());
создание совместимого с окном контекста совместимой памяти (функция CreateCompatibleDC());
выбор совместимой памяти в совместимый контекст (макрос SelectBitmap());
выбор в контекст совместимой памяти прозрачного пера и яркой кисти для рисования изображения в этой памяти;
образование структурной переменной типа RECT, описывающей размер совместимой памяти, и ее инициализация;
установка таймера с периодом 50 мс;
освобождение контекста окна (функция ReleaseDC()).
Состав функции OnTimer():
вычисление текущих координат фигуры в соответствии с заданием;
закрашивание совместимой памяти черным цветом (функция FillRect());
рисование в совместимой памяти фигуры с использованием текущих значений координат;
вызов функции InvalidateRect(), инициирующей посылку в главное окно сообщенияWM_PAINTбез перерисовки фона (последний параметр функцииInvalidateRect() должен быть равенFALSE).
Состав функции OnPaint():
получение контекста окна (функция BeginPaint());
копирование совместимой памяти в окно (функция BitBlt();
освобождение контекста окна (функция EndPaint()).
Убедитесь в повышении качества изображения (исчезло его мерцание), хотя скорость перемещения изображения осталась, естественно, низкой.