Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС / Пр_1.doc
Скачиваний:
145
Добавлен:
11.04.2015
Размер:
92.67 Кб
Скачать

Задания для самостоятельного выполнения

Задание 1.

В среде Visual C++ создайте проект CrtFigLib – библиотеку динамической компоновки, содержащую две функции: рисование окружности красного цвета и вписанного в нее правильного треугольника зеленого цвета DrawCrlTrg, рисование квадрата синего цвета и вписанной в него окружности желтого цвета DrawSqwCrl. Функции DrawCrlTrg и DrawSqwCrl должны принимать три параметра: дескриптор контекста устройства, ширину клиентской области окна, высоту клиентской области окна. Функци DrawCrlTrg и DrawSqwCrl сделайте экспортируемыми.

В среде Visual C++ создайте проект DrawCrlTrg – приложение, выполняющее рисование в центре клиентской области своего окна окружности красного цвета и вписанного в нее правильного треугольника зеленого цвета с помощью функции DrawCrlTrg библиотеки CrtFigLib. Динамическое связывание выполнить с импортом.

В среде Visual C++ создайте проект DrawSqwCrl – приложение, выполняющее рисование в центре клиентской области своего окна квадрата синего цвета и вписанной в него окружности желтого цвета с помощью функции DrawSqwCrl библиотеки CrtFigLib. Динамическое связывание выполнить без импортом.

Скопируйте файлы приложений и DLL библиотеку в одну папку и запустите оба приложения.

Задание 2.

В графическом редакторе создайте 3 рисунка одинаковых размеров формата Bitmap.

В среде Visual C++ создайте проект BmpRes – динамически подключаемую библиотеку, выполняющую единственную функцию – хранение созданных битовых образов. Для этого необходимо к проекту добавить в ресурсы эти битовые образы. Дайте им идентификаторы 1, 2, 3.

В среде Visual C++ создайте проект DrawBmp – приложение, выводящее в циклическом порядке битовые образы, хранящиеся в библиотеке BmpRes.dll, в клиентскую область окна приложения. Смена битового образа должна осуществляться при нажатии на любую из клавиш клавиатуры.

Указание к выполнению второй части задания. При нажатии на клавишу посылается сообщение WM_CHAR. В его обработчике и следует разместить код по загрузке нового битового образа и выдачи команды перерисовки рисунка (вызов функции InvalidateRect(hwnd /*дескриптор перерисовываемого окна*/, NULL, TRUE )). Загрузка битового образа выполняется функцией LoadBitmap, удаление битового образа выполняется функцией DeleteObject. Для рисования битового образа (в обработчике сообщения WM_PAINT) необходимо выполнить следующие действия: создать в памяти контекст устройства, совместимый с физическим (функция CreateCompatibleDC); выбрать в полученный контекст устройства битовый образ (функция SelectObject); получить в переменную типа BITMAP данные о размерах битового образа (функция GetObject); скопировать содержимое контекста устройства в памяти с битовым образом на контекст физического устройства (функция BitBlt). Динамическое связывание выполнить без импорта.

Запустить и протестировать приложение.

Задание 3.

Выполнить предыдущее задание, используя динамическое связывание с импортом. Для этого загрузку битовых образов нужно осуществить в динамически подключаемой библиотеке функцией входа/выхода при обращении приложения к ней (При обработке какого уведомления?) и освобождение их при закрытии приложения (При обработке какого уведомления?). Дескрипторы битовых образов должны быть объявлены как экспортируемые переменные. В приложении эти же переменные должны быть объявлены как импортируемые. Проект для создания динамически подключаемой библиотеки назвать BmpResI, а проект приложения – DrawBmpI.

Задание 4.

Используя созданную в предыдущем задании библиотеку динамической компоновки, создайте приложение DrawBmpIn с той же функциональностью, что и в предыдущем задании, но динамическую компоновку выполнить без импорта, дескрипторы битовых образов не должны объявляться импортируемыми, а их связь с соответствующими дескрипторами библиотеки должна выполняться во время выполнения приложения (Подсказка: используйте функцию GetProcAddress).

Задание 5.

В среде Visual C++ создайте проект ShMemLib – библиотеку динамической компоновки, имеющую следующие элементы. Разделяемая область памяти с именем “common”, хранящая массив символов из 2*1024 элементов StrArr, первоначально инициализированный пустой строкой. Экспортируемая функция ChangeStr, выполняющая запись новой строки в массив символов StrArr. Экспортируемая функция GetStr, возвращающая строку из массива StrArr.

В среде Visual C++ создайте проект ShMemA – приложение c диалоговым окном. В диалоговом окне создайте метку для отображения строки, поле ввода строки, кнопку «Изменить» и кнопку «Считать». При нажатии на кнопке «Изменить», строка из поля ввода должна записываться в строку StrArr разделяемой область памяти “common” ShMemLib библиотеки. При нажатии на кнопке «Считать», строка StrArr разделяемой область памяти “common” ShMemLib библиотеки должна отобразиться в метке диалогового окна приложения ShMem . Динамическое связывание выполнить с импортом.

Запустите два экземпляра приложения и обменяйтесь между ними сообщениями.

Задание 6 (дополнительное).

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