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

Работа 16. Передача параметров в функции dll-библиотек

Воспользуйтесь заданием D(работа 8) из практикума предыдущего семестра, где в главное окно приложения выводился некоторый график. Оформите алгоритм рисования графика в виде программыDLL-библиотеки. Включите в библиотеку две функции рисования одного и того же графика, различающиеся, например, масштабом изображения или его положением относительно осей координат. Поскольку для вывода любого изображения в окно приложения необходимо использовать дескриптор контекста устройства, его значение придется передавать в функциюDLL-библиотеки в качестве параметра. Другим параметром может быть, например, цвет графика или дескриптор пера. Создайте соответствующуюDLL-библиотеку и подключите ее к приложению любым из рассмотренных в предыдущей работе способом. В соответствующем месте основной программы (именно, в функцииOnPaint()) осуществите последовательный вызов функцийDLL-библиотеки. Запустите программу и убедитесь в правильном отображении графиков.

Индивидуальные задания лабораторного практикума

Задание A1.В середину главного окна голубого цвета выведите произвольный символ красного цвета. В каждом такте таймера, работающего с частотой 20 Гц, перемещайте символ на небольшой угол по образующей улитки Паскаля, уравнение которой в параметрической форме имеет видx=a cos2 t +cost,y=a costsint + +sint. Выберите значениеaв пределах 1,5 – 2,0, эффективный радиус кривой 40 – 50 пикселов, шаг изменения параметраt0,05 и такое число шагов, чтобы получить один полный период графика. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B1.Фигура плавно перемещается по горизонтали от левого края окна до правого, скачком возвращается назад и повторяет плавное движение вправо. В каждом шагеx-координату фигуры изменяйте на 1 пиксел.

Задание C1.Массив записываемых в файл данных должен представлять собой последовательный ряд из 5000 целых чисел в убывающем порядке.

Задание D1.Первый поток выводит в левую половину окна цветными символами текущее время (часы, минуты и секунды), получаемое с помощью функцииGetLocalTime().

Второй поток выводит в правую половину окна изображение круга, заливаемого попеременно то одним, то другим цветом.

Задание A2.У левого края достаточно широкого главного окна желтого цвета выведите горизонтальную зеленую ленточку длиной 10 пикселов. В каждом такте таймера, работающего с частотой 20 Гц, изменяйте ее длину на 4 – 5 пикселов так, чтобы она росла вправо. Остановите таймер, когда ленточка достигнет правого края экрана.

Задание B2.Фигура плавно перемещается по окружности, уравнение которой в параметрической форме имеет видx =sint,y = =cost. Шаг изменения параметраtзадайте равным 0,02, значенияxиyумножайте на 80.

Задание c2.Массив записываемых в файл данных должен представлять собой последовательный ряд из 2000 целых четных чисел.

Задание D2.Первый поток выводит в верхнюю половину окна цветными символами текущие экранные координаты курсора мыши, получаемые с помощью функцииGetCursorPos().

Второй поток выводит в нижнюю половину окна изображение попеременно то левой, то правой половины цветного круга.

Перемещая по экрану курсор мыши, проанализируйте работу программы.

Задание A3.В середину главного окна серого цвета выведите толстую синюю линию длиной 50 – 100 пикселов под углом к вертикали. В каждом такте таймера, работающего с частотой 1 Гц, изменяйте ее положение так, чтобы она качалась вправо-влево вокруг нижней точки наподобие маятника метронома. Остановите таймер после 10 периодов качания.

Задание B3.Фигура плавно перемещается по вертикали от нижнего края окна до верхнего, скачком возвращается назад и повторяет движение вверх. В каждом шагеy-координату фигуры изменяйте на 1 пиксел.

Задание C3.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 коротких (типshort) целых чисел.

Задание D3.Первый поток выводит в левую половину окна круг, залитый каким-либо цветом, и попеременно изменяет цвет фона под ней, т. е. цвет этой половины окна.

Второй поток выводит в правую половину окна цветными символами число миллисекунд, истекших от момента загрузки операционной системы, которое можно получить с помощью функции GetTickCount(). Оцените, когда была в последний раз загружена операционная система на вашем компьютере?

Задание A4.У левого края достаточно широкого главного окна желтого цвета выведите один произвольный символ синего цвета. В каждом такте таймера, работающего с частотой 10 Гц, перемещайте символ вправо на 4 – 5 пикселов. Остановите перемещение, когда символ дойдет до правого края окна. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B4.Фигура плавно перемещается по эллипсу, уравнение которого в параметрической форме имеет видx =sin(t+ 1,0),y =cost. Шаг изменения параметраtзадайте 0,02, значенияxиyумножайте на 80.

Задание C4.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 целых четных (типunsigned int) чисел в убывающем порядке.

Задание D4.Первый поток выводит в верхнюю половину окна изображение цветного круга попеременно то большего, то меньшего диаметра.

Второй поток выводит в нижнюю половину окна цветными символами текущее время по Гринвичу (часы, минуты и секунды), получаемое с помощью функции GetSystemTime(). На сколько время по Гринвичу отличается от московского?

Задание A5.В нижней части достаточно высокого главного окна желтого цвета нарисуйте горизонтально лежащий коричневый брусок. В каждом такте таймера, работающего с частотой 20 Гц, увеличивайте высоту бруска на 4 – 5 пикселов так, чтобы он рос вверх. Остановите таймер, когда брусок достигнет верха окна.

Задание B5.Фигура плавно перемещается по синусоидеy=sintвдоль горизонтали от левого края окна до правого, скачком возвращается назад и повторяет движение вправо. В каждом шагеx-координату фигуры изменяйте на 1 пиксел, параметрtна 0,05; значенияyумножайте на 80.

Задание C5.Массив записываемых в файл данных должен представлять собой последовательный ряд из 5000 коротких (типshort) целых нечетных чисел.

Задание D5.Первый поток выводит в случайные места левой половины окна небольшие цветные кружки. Для повышения наглядности не затирайте изображение в каждом такте вывода, накапливая выводимые фигуры на экране.

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

Задание A6.С левой стороны достаточно широкого главного окна зеленого цвета выведите желтый круг диаметром 50 – 60 пикселов. В каждом такте таймера, работающего с частотой 20 Гц, перемещайте круг вправо на 4 – 5 пикселов. Остановите таймер, когда круг достигнет правого края окна. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B6.Фигура плавно перемещается по образующей фигуры Лиссажу, уравнение которой в параметрической форме имеет видx= sint,y=cos(2t+ π/2). В каждом шаге параметрtизменяйте на 0,02, значенияxиyумножайте на 80. Для константы π/2 в языке С++ существует обозначениеM_PI_2.

Задание C6.Массив записываемых в файл данных должен представлять собой последовательный ряд из 2000 целых четных чисел в убывающем порядке.

Задание D6.Первый поток выводит в верхнюю половину окна попеременно изображения то круга, то квадрата с общим центром. Фигуры должны быть залиты каким-либо цветом.

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

Задание A7.В середину достаточно большого главного окна голубого цвета выведите небольшой розовый квадрат. В каждом такте таймера, работающего с частотой 10 Гц, увеличивайте размер квадрата на 5 – 10 пикселов, оставляя неизменным положение его центра. Остановите таймер, когда квадрат займет все окно.

Задание B7.Фигура плавно перемещается по диагонали от левого верхнего края окна до правого нижнего, скачком возвращается назад и повторяет движение по диагонали. В каждом шаге обе координаты фигуры изменяйте на 1 пиксел.

Задание C7.Массив записываемых в файл данных должен представлять собой последовательный ряд из 4000 целых (типUINT) чисел, кратных 5.

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

Второй поток выводит в правую половину окна цветными символами полный объем физической памяти и объем свободной физической памяти. Вывод лучше организовать в две строки. Требуемую информацию можно получить с помощью функции GlobalMemoryStatus(). Запуская вместе с испытываемой программой другие приложения Windows (ваши или системные), пронаблюдайте за использованием физической памяти.

Задание A8.В середину достаточно большого главного окна голубого цвета выведите один произвольный символ темно-зеленого цвета. В каждом такте таймера, работающего с частотой 20 Гц, перемещайте символ на небольшой угол по образующей кардиоиды, уравнение которой в параметрической форме имеет видx =cost (1 +cost),y =sint (1 +cost). Задайте эффективный радиус кривой 40 – 50 пикселов, шаг изменения параметраt0,1 и такое число шагов, чтобы получить один полный период графика. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B8.Фигура плавно перемещается по вертикали от верхнего края окна до нижнего, скачком возвращается назад и повторяет движение вниз. В каждом шагеy-координату фигуры изменяйте на 1 пиксел.

Задание C8.Массив записываемых в файл данных должен представлять собой последовательный ряд из 256 чисел типаBYTEв убывающем порядке.

Задание D8.Первый поток выводит в верхнюю половину окна изображение цветного треугольника, поворачивающийся вокруг своего основания попеременно вершиной то вверх, то вниз. Треугольник рисуется функциейPolygon().

Второй поток выводит в нижнюю половину окна цветными символами время в миллисекундах, истекшее от момента загрузки операционной системы, которое можно получить с помощью функции GetCurrentTime(). Оцените, когда в последний раз была загружена операционная система на вашем компьютере?

Задание A9.В середину главного окна темно-синего цвета выведите изображение полной желтой Луны. Надвигайте на нее с правой стороны тень Земли, изображая затмение Луны. В каждом такте таймера, работающего с частотой 10 Гц, перемещайте тень Земли влево на 4 – 5 пикселов до тех пор, пока Луна не закроется полностью.

Задание B9.Фигура плавно перемещается по образующей вырожденной фигуры Лиссажу, уравнение которой в параметрической форме имеет видx= sint,y=cos(t– π/2). В каждом шаге параметрtизменяйте на 0,02, значенияxиyумножайте на 80. Для константы π/2 в языке С++ существует обозначениеM_PI_2.

Задание C9.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 коротких (типshort) целых четных чисел в убывающем порядке.

Задание D9.Первый поток выводит в левую половину окна цветными символами состояние клавиш Shift, которое можно получить с помощью функцииGetAsyncKeyState(). Состояние анализируемых клавиш индицируйте, выводя на экран соответствующие надписи.

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

Задание A10.В левый нижний угол квадратного главного окна светло-зеленого цвета выведите один произвольный фиолетовый символ. В каждом такте таймера, работающего с частотой 10 Гц, перемещайте символ по диагонали вправо и вверх на 4 – 5 пикселов. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона. Остановите таймер, когда изображение символа подойдет к правому верхнему углу окна.

Задание B10.Фигура плавно перемещается по дуге, уравнение которой в параметрической форме имеет видx =sin2t,y =cost. Шаг изменения параметраtзадайте равным 0,02, значенияxиyумножайте на 80.

Задание C10.Массив записываемых в файл данных должен представлять собой последовательный ряд из 10000 целых чисел, кратных 4.

Задание D10.Первый поток выводит в верхнюю половину окна попеременно изображения то левой, то правой половины вытянутого цветного эллипса.

Второй поток выводит в нижнюю половину окна цветными символами ширину и высоту главного окна приложения, которые можно вычислить из данных, предоставляемых функцией GetWindowRect(). Изменяя размер главного окна приложения, проанализируйте работу программы.

Задание A11.В середине достаточно широкого главного окна светло-серого цвета нарисуйте длинный горизонтальный брусок, у которого небольшая часть слева закрашена красным цветом, а остальная поверхность – синим. В каждом такте таймера, работающего с частотой 5 Гц, перемещайте границу смены цвета на 4 – 5 пикселов вправо. Остановите таймер, когда весь брусок станет красным.

Задание B11.Фигура плавно перемещается по синусоидеx=sintвдоль вертикали от верхнего края окна до нижнего, скачком возвращается назад и повторяет движение вниз. В каждом шагеy-координату фигуры изменяйте на 1 пиксел, параметрtна 0,05; значенияxумножайте на 80.

Задание C11.Массив записываемых в файл данных должен представлять собой последовательный ряд из 2000 коротких (типshort) нечетных целых чисел в убывающем порядке.

Задание D11.Первый поток выводит в левую половину окна цветными символами число целых секунд, истекших с момента загрузки операционной системы. Значение этого времени (в других единицах) можно получить с помощью функцииGetCurrentTime().

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

Задание A12.В середину главного окна черного цвета выведите закрашенный белой кистью круг диаметром 150 – 200 пикселов. В каждом такте таймера, работающего с максимальной частотой (20 Гц), уменьшайте яркость зеленого компонента цвета кисти на 2 – 3 единицы интенсивности и наблюдайте изменение цвета круга. Остановите таймер после завершения двух периодов смены цвета.

Задание B12.Фигура плавно перемещается по дуге, уравнение которой в параметрической форме имеет видx =sint,y =cos2t. Шаг изменения параметраtзадайте равным 0,02, значенияxиyумножайте на 80.

Задание C12.Массив записываемых в файл данных должен представлять собой последовательный ряд из 512 чисел типаBYTE.

Задание D12.Первый поток выводит в верхнюю половину окна цветными символами номер текущего такта данного потока.

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

Задание A13.В середину главного окна синего цвета выведите прописную букву “А” красного цвета. В каждом такте таймера, работающего с частотой 10 Гц, превращайте ее в следующий по алфавиту символ. Остановите таймер после вывода всех символов символьной таблицы.

Задание B13.Фигура плавно перемещается по развертывающейся спирали, уравнение которой в параметрической форме имеет видx = tsint,y =tcost. Параметрtизменяйте от 2 до 20 с шагом 0,05, значенияxиyумножайте на 8.

Задание C13.Массив записываемых в файл данных должен представлять собой последовательный ряд из 500 коротких (типshort) целых чисел.

Задание D13.Первый поток выводит в левую половину окна квадрат, нарисованный толстым цветным пером, и попеременно изменяет цвет этой половины окна, в том числе и цвет внутри квадрата.

Второй поток выводит в правую половину состояние левой клавиши мыши. Состояние клавиш мыши или клавиатуры можно получить с помощью функции GetAsyncKeyState().Состояние анализируемой клавиши индицируйте, выводя на экран соответствующие надписи.

Задание A14.В середину главного окна зеленого цвета выведите светло-фиолетовый круг диаметром 100 – 120 пикселов, в правой части которого вырезан узкий сектор. В последовательных тактах таймера, работающего с частотой 2 Гц, сжимайте и раскрывайте этот сектор, получая стилизованное изображение закрывающегося и открывающегося рта. Остановите таймер после 10 периодов смены изображения. Круг с вырезанным сектором рисуется функциейPie().

Задание B14.Фигура плавно перемещается по диагонали от левого нижнего края окна до правого верхнего, скачком возвращается назад и повторяет движение по диагонали. В каждом шаге обе координаты фигуры изменяйте на 1 пиксел.

Задание C14.Массив записываемых в файл данных должен представлять собой последовательный ряд из 10000 целых четных (типunsigned int) чисел в убывающем порядке.

Задание D14.Первый поток выводит в верхнюю половину окна попеременно то два, то три концентрических круга.

Второй поток выводит в нижнюю половину окна цветными символами координаты рабочей области окна.

Изменяя размер окна приложения, проанализируйте работу программы.

Задание A15.В середину главного окна темно-синего цвета выведите толстую светло-голубую линию длиной 50 – 100 пикселов под углом к вертикали. В каждом такте таймера, работающего с частотой 5 Гц, изменяйте ее положение так, чтобы она качалась вправо-влево вокруг верхней точки наподобие маятника. Остановите таймер после 10 периодов качания.

Задание B15.Фигура плавно перемещается по дуге, уравнение которой в параметрической форме имеет видx = –sint,y =cos2t. Шаг изменения параметраtзадайте равным 0,02, значенияxиyумножайте на 80.

Задание C15.Массив записываемых в файл данных должен представлять собой последовательный ряд из 4000 коротких (типUSHORT) целых нечетных чисел.

Задание D15.Первый поток выводит в левую половину окна черный квадрат и изменяет попеременно цвет фона под ним, т. е. цвет левой половины окна.

Второй поток выводит в правую половину окна произвольный цветной символ со случайными координатами.

Задание A16.В середине главного окна синего цвета нарисуйте тонкий серп старой луны желтого цвета. В каждом такте таймера, работающего с частотой 2 Гц, уменьшайте на 1 – 2 пиксела толщину полумесяца, чтобы он, пройдя через новолуние, превратился в изображение молодой луны, после чего остановите таймер.

Задание B16.Фигура плавно перемещается по горизонтали от правого края окна до левого, скачком возвращается назад и повторяет плавное движение влево. В каждом шагеx-координату фигуры изменяйте на 1 пиксел.

Задание C16.Массив записываемых в файл данных должен представлять собой последовательный ряд из 256 чисел типаchar.

Задание D16.Первый поток выводит в верхнюю половину окна попеременно то левую четверть, то правые три четверти цветного круга.

Второй поток выводит точно в центр рабочей области нижней половины окна цветной символ.

Изменяя размер окна приложения, проанализируйте работу программы.

Задание A17.В середину главного окна бледно-желтого цвета выведите залитый коричневым цветом круг диаметром 50 – 100 пикселов. В каждом такте таймера, работающего с частотой 10 Гц, увеличивайте горизонтальный диаметр круга на 2 – 3 пиксела, превращая его тем самым во все более вытянутый эллипс. Положение центра эллипса оставляйте неизменным. Остановите таймер, когда изображение эллипса займет весь экран по ширине.

Задание B17.Фигура плавно качается по вертикали в пределах окна. Такое движение можно получить, если при неизменнойx-координате фигуры ееy-координату определять по формулеy=sint. Шаг изменения параметраtзадайте равным 0,03, значенияyумножайте на 90.

Задание C17.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 целых чисел, начинающихся с 4096.

Задание D17.Первый поток выводит в левую половину окна цветной квадрат и периодически изменяет фон этой половины окна, закрашивая ее штриховой кистью с разной ориентацией штрихов.

Второй поток выводит в правую половину окна цветными символами координаты курсора мыши в рабочей области окна. Экранные координаты курсора мыши можно получить с помощью функции GetCursorPos(); для преобразования их в координаты рабочей области используется функцияScreenToClient().

Задание A18.В середине главного окна темно-синего цвета нарисуйте тонкий белый лунный серп рогами вниз (чего никогда не бывает в наших широтах), слегка наклоненный в одну сторону. В каждом такте таймера, работающего с частотой 5 Гц, покачивайте серп, наклоняя его то в одну, то в другую сторону. Остановите таймер после 10 периодов качания.

Задание B18.Фигура плавно перемещается по очень узкому эллипсу, лежащему горизонтально, уравнение которого в параметрической форме имеет видx =90sint,y =10cost. Шаг изменения параметраtзадайте равным 0,03.

Задание C18.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 целых нечетных чисел в убывающем порядке.

Задание D18.Первый поток выводит в верхнюю половину окна цветной символ с случайными координатами (в пределах этой половины окна). Для повышения наглядности не затирайте изображение в каждом такте вывода, накапливая выводимые символы на экране.

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

Задание A19.В середину главного окна желтого цвета выведите один произвольный символ ярко-синего цвета. В каждом такте таймера, работающего с частотой 50 Гц, перемещайте символ на небольшой угол по кругу радиусом 50 – 80 пикселов. Уравнение круга в параметрической форме имеет видx =sint,y =cost. Шаг изменения параметраtзадайте 0,05, а число шагов таким, чтобы получить один полный период графика. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B19.Фигура плавно перемещается по образующей вырожденной фигуры Лиссажу, уравнение которой в параметрической форме имеет видx= sint,y=cos(t+ π/2). В каждом шаге параметрtизменяйте на 0,02, значенияxиyумножайте на 80. Для константы π/2 в языке С++ существует обозначениеM_PI_2.

Задание C19.Массив записываемых в файл данных должен представлять собой последовательный ряд из 500 коротких (типshort) целых четных чисел в убывающем порядке.

Задание D19.Первый поток рисует в левой половине толстым цветным пером изображение прозрачного квадрата попеременно то большего, то меньшего размера с концентрическим расположением.

Второй поток выводит в правую половину окна круг достаточно большого размера, закрашенный первоначально черным цветом. Значение цвета кисти, которой закрашивается круг, периодически увеличивается с шагом 3 – 5 единиц.

Задание A20.В нижнюю часть достаточно высокого главного окна светло-зеленого цвета выведите короткую строку текста темно-зелеными буквами. В каждом такте таймера, работающего с частотой 10 Гц, смещайте строку вверх на 5 – 6 пикселов. Остановите таймер, когда строка дойдет до верхнего края окна.

Задание B20.Фигура плавно перемещается по свертывающейся спирали, уравнение которой в параметрической форме имеет видx =sint/ 0.1t,y =tcost/ 0.1t. Параметрtизменяйте от 5 до 30 с шагом 0,05, значенияxиyумножайте на 80.

Задание C20. Массив записываемых в файл данных должен представлять собой последовательный ряд из 256 чисел типаUCHARв убывающем порядке.

Задание D20.Первый поток выводит в верхнюю половину окрашенного окна большой круг, кисть для заливки которого выбирается случайным образом из трех созданных заранее кистей разных цветов. Для того чтобы наглядно фиксировать моменты смены кисти, в центр круга выводится номер такта этого потока.

Первый поток выводит в нижнюю половину окна цветными символами текущее время (часы, минуты и секунды), получаемое с помощью функции GetLocalTime().

Задание A21.В середину главного окна фиолетового цвета, квадратной формы и достаточно большого размера выведите залитый красным цветом круг небольшого диаметра. В каждом такте таймера, работающего с частотой 10 Гц, увеличивайте диаметр круга на 3 – 4 пиксела, оставляя неизменным положение его центра. Остановите таймер, когда круг займет все окно.

Задание B21.Фигура периодически в пределах окна плавно перемещается по экспоненциальной кривой, описываемой уравнениемy= 1 –e–2 t. Шаг изменения параметраtзадайте равным 0,03, значенияyумножайте на 180. В каждом шагеx-координату фигуры изменяйте на 1 пиксел.

Задание C21.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 коротких (типunsigned short) нечетных целых чисел в убывающем порядке.

Задание D21.Первый поток выводит в левую половину окрашенного окна треугольник, заливаемый попеременно то синим, то зеленым цветом. Треугольник рисуется с помощью функцииPolygon().

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

Задание A22.В середину главного окна светло-зеленого цвета выведите залитую темно-зеленым цветом половину круга диаметром 50 – 100 пикселов. В каждом такте таймера, работающего с частотой 5 Гц, изменяйте изображение так, чтобы выводилась то правая, то левая половина круга. Остановите таймер после 10 периодов смены изображения.

Задание B22.Фигура плавно перемещается по дуге, уравнение которой в параметрической форме имеет видx = –sin2t,y =cost. Шаг изменения параметраtзадайте равным 0,02, значенияxиyумножайте на 80.

Задание C22.Массив записываемых в файл данных должен представлять собой последовательный ряд из 2000 целых чисел, начинающихся с числа 256.

Задание D22.Первый поток выводит в верхнюю половину окна квадрат, попеременно окрашивая его в синий, зеленый и красный цвета.

Второй поток выводит в нижнюю половину окна цветными символами объем свободной физической памяти, который можно получить с помощью функции GlobalMemoryStatus(). Запуская вместе с испытываемой программой другие приложения Windows (ваши или системные), пронаблюдайте за использованием физической памяти.

Задание A23.В середину главного окна серого цвета выведите достаточно большой синий квадрат, образовав его с помощью функцииRoundRect(). Начальные значения диаметров скругляющих эллипсов примите равными 0. В каждом такте таймера, работающего с частотой 20 Гц, увеличивайте ширину обоих скругляющих эллипсов на 2 – 3 пиксела, и остановите таймер, когда ширина эллипсов достигнет диаметра круга.

Задание B23.Фигура периодически в пределах окна плавно перемещается по кривой Гаусса, описываемой уравнениемy= =e– (t – 20) (t – 20) / 20. Шаг изменения параметраtзадайте равным 0,2, значенияyумножайте на 180. В каждом шагеx-координату фигуры изменяйте на 1 пиксел.

Задание C23.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 целых чисел в убывающем порядке.

Задание D23.Первый поток выводит в левую половину окрашенного окна нижнюю часть окружности (дугу) с раствором 135°, нарисованную толстым цветным пером. Дуга покачивается в каждом такте потока вокруг центра окружности на угол 45°. Дуга окружности рисуется функциейArc().

Второй поток выводит в правую половину окна текущую позицию курсора мыши в рабочей области окна. Экранные координаты курсора мыши можно получить с помощью функции GetCursorPos(); для преобразования их в координаты рабочей области используется функцияScreenToClient().

Задание A24.В середину главного окна зеленого цвета выведите небольшой бледно-желтый квадрат. В каждом такте таймера, работающего с частотой 2 Гц, увеличивайте горизонтальный размер фигуры на 4 – 5 пикселов, преобразуя его во все более вытянутый прямоугольник и оставляя неизменным положение его центра. Остановите таймер, когда фигура займет все окно по горизонтали.

Задание B24.Фигура плавно перемещается по диагонали от правого нижнего края окна до левого верхнего, скачком возвращается назад и повторяет движение по диагонали. В каждом шаге обе координаты фигуры изменяйте на 1 пиксел.

Задание C24.Массив записываемых в файл данных должен представлять собой последовательный ряд из 256 чисел типаBYTE.

Задание D24.Первый поток периодически изменяет фон верхней половины окна, задавая ему три разных оттенка желтого цвета.

Второй поток выводит в нижнюю половину окна цветными символами текущие координаты главного окна приложения на рабочем столе, которые можно получить с помощью функции GetWindowRect(). Перемещая окно приложения по рабочему столу Windows, убедитесь в том, что программа работает правильно.

Задание A25.В середину главного окна темно-синего цвета выведите символ цифры ноль красного цвета. В каждом такте таймера, работающего с частотой 5 Гц, увеличивайте значение выводимой цифру, изменяя ее от 0 до 9. По достижении цифры 9 изменяйте ее на ноль. Остановите таймер после прохождения трех полных периодов смены цифр.

Задание B25.Фигура периодически в пределах окна плавно перемещается по кривой Гаусса, описываемой уравнениемy= = –e– (t – 25) (t – 25) / 100. Шаг изменения параметраtзадайте равным 0,2, значенияyумножайте на 180. В каждом шагеx-координату фигуры изменяйте на 1 пиксел.

Задание C25.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1000 целых чисел, кратных 5.

Задание D25.Первый поток выводит в левую половину окна цветную окружность, нарисованную толстым цветным пером. Окружность то заливается цветом своей образующей, то кажется прозрачной.

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

Задание A26.В середину главного окна зеленого цвета выведите произвольный красный символ. В каждом такте таймера, работающего с частотой 20 Гц, перемещайте символ на небольшой угол по образующей фигуры Лиссажу, уравнение которой в параметрической форме имеет видx=sint,y= cos (at+). Выберите значениеa= 1,5, – от 0,05 до 0,5. Эффективный радиус кривой увеличьте до 40 – 50 пикселов, а шаг изменения параметраtзадайте 0,1. Подберите такое число шагов, чтобы получить один полный период графика. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B26.Фигура плавно перемещается по прямой линии, подчиняясь зависимостиy=x/ 4 + 15 от левого края окна до правого, скачком возвращается назад и повторяет движение вправо. В каждом шагеx-координату фигуры изменяйте на 1 пиксел.

Задание C26.Массив записываемых в файл данных должен представлять собой последовательный ряд из 256 чисел типаchar, начинающихся с –127.

Задание D26.Первый поток выводит в левую половину окна попеременно изображения то круга, то эллипса с общим центром. Фигуры должны быть залиты каким-либо цветом.

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

Задание A27.В середину главного окна черного цвета выведите закрашенный кистью яркого красного цвета круг диаметром 150 – 200 пикселов. В каждом такте таймера, работающего с максимальной частотой (20 Гц), увеличивайте яркость зеленого компонента цвета кисти на 2 – 3 единицы интенсивности и наблюдайте изменение цвета круга. Остановите таймер после завершения двух периодов смены цвета. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B27.Фигура плавно перемещается по косинусоидеx= =sintвдоль вертикали от нижнего края окна до верхнего, скачком возвращается назад и повторяет движение вверх. В каждом шагеy-координату фигуры изменяйте на 1 пиксел, параметрtна 0,05; значенияxумножайте на 80.

Задание C27.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1024 чисел типаBYTE.

Задание D27.Первый поток выводит в верхнюю половину окна изображение левой половины цветного круга попеременно то большего, то меньшего диаметра.

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

Задание A28.В верхнем левом углу главного окна зеленого цвета нарисуйте залитый синим цветом небольшой треугольник с вершиной, расположенной на диагонали окна. В каждом такте таймера, работающего с частотой 10 Гц, изменяйте координату вершины так, чтоб она оставалась на диагонали, но перемещалась в сторону нижнего правого угла окна. Остановите таймер после того, как треугольник, удлиняясь, достигнет угла окна. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона. Треугольник рисуется с помощью функцииPolygon().

Задание B28.Фигура плавно перемещается по кривойy=sin3tвдоль горизонтали от левого края окна до правого, скачком возвращается назад и повторяет движение вправо. В каждом шагеy-координату фигуры изменяйте на 1 пиксел, параметрtна 0,05; значенияyумножайте на 80.

Задание C28.Массив записываемых в файл данных должен представлять собой последовательный ряд из 64 К целых чисел типаWORD.

Задание D28.Первый поток выводит в нижнюю половину окна цветной треугольник с вертикальным основанием и обращенный вершиной то вправо, то влево. Треугольник рисуется с помощью функцииPolygon().

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

Задание A29.В каждом такте таймера, работающего с частотой 10 Гц, выводите в окно темно-синего цвета размером 400400 пикселов ярко-желтый символ звездочки (*) в позицию со случайными координатами. Остановите таймер после вывода заданного числа (50 – 100) символов. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B29.Фигура плавно перемещается по кривойy= |sint| вдоль горизонтали от левого края окна до правого, скачком возвращается назад и повторяет движение вправо. В каждом шагеy-координату фигуры изменяйте на 1 пиксел, параметрtна 0,05; значенияyумножайте на 80.

Задание C29.Массив записываемых в файл данных должен представлять собой ряд из 16 четных чисел типаint.

Задание D29.Первый поток выводит в левую половину окна то верхнюю, то нижнюю половину цветного круга.

Второй поток выводит в правую половину окна последовательные случайные числа в пределах от 0 до 99.

Задание A30.В середину главного окна черного цвета выведите закрашенный белой кистью квадрат с размером сторон 150 – 200 пикселов. В каждом такте таймера, работающего с максимальной частотой (20 Гц), уменьшайте яркость всех трех компонентов цвета кисти на 2 – 3 единицы интенсивности и наблюдайте изменение цвета фигуры. Остановите таймер после завершения двух периодов смены цвета.

Задание B30.Фигура плавно перемещается по горизонтали, касаясь нижнего края окна, от левого края окна до правого. Коснувшись правого края, фигура изменяет направление движения и начинает перемещаться влево. Коснувшись левого края окна, фигура опять изменяет направление движения и т. д. В каждом шагеx-координату фигуры изменяйте на 1 пиксел.

Задание C30.Массив записываемых в файл данных должен представлять собой последовательный ряд уменьшающихся чисел типаcharот 255 до 0.

Задание D30.Первый поток выводит в правую половину окна попеременно цветные буквы “A” или “Z”.

Второй поток выводит в случайные места левой половины окна небольшие цветные кружки. Для повышения наглядности не затирайте изображение в каждом такте вывода, накапливая выводимые фигуры на экране.

Задание A31.В каждом такте таймера, работающего с максимальной частотой (20 Гц), выводите в окно светло-голубого цвета размером 400400 пикселов небольшой (диаметром 20 – 30 пикселов) ярко-желтый круг в позицию со случайными координатами. Диапазон координат подберите так, чтобы все выводимые фигуры не выходили за пределы окна. Остановите таймер после вывода заданного числа (100 – 200) фигур. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона.

Задание B31.Фигура плавно перемещается по образующей фигуры Лиссажу, уравнение которой в параметрической форме имеет видx= sint,y=cos(2t+ 2). В каждом шаге параметрtизменяйте на 0,02, значенияxиyумножайте на 80. Для константы π/2 в языке С++ существует обозначениеM_PI_2.

Задание C31.Массив записываемых в файл данных должен представлять собой последовательный ряд из 1 миллиона целых чисел типаint.

Задание D31.Первый поток выводит в верхнюю половину окна то зеленый прямоугольник, то вписанный в те же координаты синий эллипс.

Второй поток выводит в нижнюю половину окна цветными символами число секунд, истекших от момента загрузки операционной системы, которое можно получить с помощью функции GetTickCount(). Оцените, когда была в последний раз загружена операционная система на вашем компьютере?

Задание A32.В середину главного окна белого цвета выведите закрашенный кистью черного цвета треугольник с размером сторон 150 – 200 пикселов. В каждом такте таймера, работающего с максимальной частотой (20 Гц), увеличивайте яркость всех трех компонентов цвета кисти на 2 – 3 единицы интенсивности и наблюдайте изменение цвета фигуры. Остановите таймер после завершения двух периодов смены цвета. Выполните задание в двух вариантах – с затиранием фона окна при его перерисовке и без затирания фона. Треугольник рисуется с помощью функцииPolygon().

Задание B32.Фигура плавно перемещается по вертикали, касаясь левого края окна, от верхнего края окна до нижнего. Коснувшись нижнего края, фигура изменяет направление движения и начинает перемещаться вверх. Коснувшись верхнего края окна, фигура опять изменяет направление движения и т. д. В каждом шагеy-координату фигуры изменяйте на 1 пиксел.

Задание C32.Массив записываемых в файл данных должен представлять собой последовательный ряд из 64Kчисел типаWORD.

Задание D32.Первый поток выводит в левую половину окна изображение правой половины цветного круга попеременно то большего, то меньшего диаметра.

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

С п и с о к л и т е р а т у р ы

1. Финогенов К. Г. Лабораторный практикум “Основы разработки приложений Windows”. Книга 1. М.: МИФИ, 2004.

2. Финогенов К. Г. Лабораторный практикум “Основы программирования на языке С++”. М.: МИФИ, 2004.

3. Финогенов К. Г. Win32. Основы программирования. М.: ДИАЛОГ-МИФИ, 2002.

К. Г. Финогенов