- •Лабораторный практикум «Основы разработки приложений 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
Работа 8. Движение изображения по фоновому рисунку
Найдите в каталогах Windowsкакой-либо рисунок размером 256256 пикселов (например, Лес.bmpили Чешуя.bmp) и скопируйте его в свой рабочий каталог. Увеличьте размер главного окна на 8 пикселов по горизонтали и на 26 пикселов по вертикали для компенсации толщины рамок и строки заголовка (чтобы размер собственно рабочей области окна точно соответствовал размеру фонового рисунка).
В функции OnCreate()вместо создания одной пустой области совместимой памяти размером 256256 пикселов, как это делалось в работе 7, образуйте две таких области, одновременно загрузив и в ту, и в другую рисунок из файла .bmp. Одна из этих областей будет служить источником фонового рисунка, а другая использоваться как рабочая; в ней будет формироваться движущееся изображение. Для каждой из областей совместимой памяти предусмотрите свой совместимый контекст и выберите в эти контексты дескрипторы соответствующих областей. Далее, как и в предыдущей работе, выберите в контекст рабочей совместимой памяти дескрипторы прозрачного пера и цветной яркой кисти, освободите контекст окна и установите таймер.
В функции OnTimer()вместо закрашивания рабочей совместимой памяти черным цветом, как это делалось в предыдущей работе, скопируйте в нее функциейBitBlt()фоновый рисунок из фоновой совместимой памяти, после чего нарисуйте новое (сдвинутое) изображение и инициируйте посылку в главное окно сообщенияWM_PAINT.
Функция OnPaint()не претерпевает никаких изменений; в ней осуществляется копирование рабочей совместимой памяти (фон плюс наша фигура) в окно приложения.
Работа 9. Работа с файлами (индивидуальное задание c)
Составьте программу, которая с помощью 32-разрядных функций работы с файлами CreateFile(),WriteFile(),SetFilePointer()иReadFile()выполняет базовые операции с файлами, именно: создание нового файла, запись в него данных и их контрольное чтение. Зарезервируйте в памяти массив и заполните его в цикле данными, указанными в индивидуальном задании. Создайте файл с произвольным именем и расширением. Выведите созданный массив в файл. С помощью функцииSetFilePointer() установите указатель на начало файла и прочитайте созданный файл в другой, пустой, массив такого же размера. Выведите для контроля в окно сообщения два-три элемента этого массива. Программа состоит из одной функцииWinMain()без каких-либо окон или элементов управления (кроме окна вывода сообщения).
С помощью программы NortonCommanderизучите физическое содержимое файла на диске и удостоверьтесь, что файл имеет правильную длину и содержит данные в соответствии с заданием.
Работа 10. Стандартные диалоги Windows для работы с файлами
Составьте программу, которая вызовом стандартного диалога Windows “Открытие файла” позволяет найти на диске нужный файл, после чего открывает этот файл и читает из него данные в предусмотренный в программе пустой массив. Выведите для контроля в окно сообщения несколько элементов этого массива. Прочитайте созданный в предыдущей работе файл и убедитесь в правильном функционировании программы.
Стандартный диалог Windows “Открытие файла” создается вызовом функции GetOpenFileName(), в качестве параметра которой указывается адрес созданной в программе структурной переменной типаOPENFILENAME. Эту структуру необходимо предварительно обнулить, а затем заполнить в ней по меньшей мере следующие элементы:
lStructSize
lpstrFilter
lpstrFile
nMaxFile
В элемент lpstrFilterпомещается адрес строки, содержащей фильтр и имеющей, например, такой вид (если открываемый файл имеет расширение .DAT):
char str[]="Файлы данных (*.DAT)", "*.DAT",
"Все файлы (*.*)","*.*", "";
В каждой паре строк сначала определяется комментарий, который появится в соответствующем поле стандартного диалога, а затем соответствующий этому комментарию шаблон, по которому функция GetOpenFileName()будет отбирать файлы для вывода в создаваемый ею диалог.