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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ В ОСТОЧНО-УКРАИНСКОГО НАЦИОНАЛЬНОГО УНИВЕРСИТЕТА имени ВЛАДИМИРА ДАЛЯ

(г. Северодонецк)

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

для выполнения практических заданий и контрольных работ

по дисциплине “СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ”

Прогаммирование в многозадачных системах

для студентов специальностей 7.091502 «Системное программирование», 7.091501«Компьютерные системы и сети», дневной и заочной форм обучения

Северодонецк- 2010г.

УДК 681.3.06

Методические указания к выполнению практических и контрольных занятий по дисциплине "Системное программное обеспечение" (для студентов дневного и заочного отделений, обучающихся по направлению 6.0915 «Компьютерная инженерия», специальности 7.091502 «Системное программирование») / Сост. А.М. Ларгина, Г.М. Смирнов. - Северодонецк: Издательство ТИ, 2010. - 75с. Данный курс практических занятий позволит студентам получить практические навыки использования интерфейса прикладного программирования (API - Application Programming Interface) многозадачной операционной системы на примере Windows. Использование API для программирования ввода-вывода позволяет разрабатывать платформо - независимые приложения.

Составитель: А.М. Ларгина

Рецензент:

Затверджено Вченою радою інституту.

Протокол № ___ від «___» __________ 2010 р.

Голова Вченої ради

ВВЕДЕНИЕ. ИСПОЛЬЗОВАНИЕ СИСТЕМНЫХ ФУНКЦИЙ ОС WINDOWS ДЛЯ РАЗРАБОТКИ API - ПРИЛОЖЕНИЙ

Прикладные программы, работающие под управлением OS Windows, имеют ряд особенностей (по сравнению с MS DOS), связанных с организацией ввода-вывода информации:

Прикладные программы не имеют возможности напрямую взаимодействовать с устройствами ввода-вывода. В случае необходимости осуществления ввода-вывода информации, прикладные программы «обязаны» обращаться с соответствующими запросами к OS Windows. С этой целью в составе OS Windows имеется большой набор подпрограмм (не только для организации ввода вывода), называемый интерфейсом прикладного программирования (английская аббревиатура – API). Такой подход к организации ввода вывода имеет то преимущество, что фактически с аппаратными устройствами компьютера взаимодействует только одна программа – операционная система, что резко снижает вероятность конфликтных ситуаций, что особенно важно для многозадачных ОС, каковой и является OS Windows. Запросы на ввод-вывод, поступающие от разных прикладных программ, OS Windows имеет возможность сохранять в очередях и соответствующим образом обрабатывать. Кроме того, программные модули операционной системы, взаимодействующие с аппаратными устройствами компьютера, заведомо обладают достаточно высокой надежностью, чего было бы трудно ожидать от всех возможных прикладных программ. Этот момент оказывает значительное положительное влияние на устойчивость работы системы в целом.

Подавляющее большинство программ, работающих под управлением OS Windows, осуществляют ввод-вывод информации в графическом режиме (в отличие от MS DOS). Преимущества графического режима очевидны: рисунки, схемы, графики, шрифты различных размеров и конфигураций – все это делает пользовательский интерфейс прикладной программы наиболее удобным и информативным.

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

Любая Windows-программа осуществляет вывод информации на то или иное устройство. Для того, чтобы абстрагироваться от конкретного аппаратного устройства, и разделить процессы построения изображения и его вывод, Windows поддерживает работу с т.н. контекстом графического устройства и набором аппаратно-независимых подпрограмм – интерфейсом графического устройства (GDI, подмножество API). За непосредственный вывод информации отвечают специальные программные модули – драйверы, которые являются специфичными для каждого из устройств ввода-вывода и выполняют действия, предписываемые аппаратно независимыми подпрограммами GDI.

Контекст графического устройства (HDC) – это информационная структура, которая создается и управляется операционной системой и предназначенная для организации построения аппаратно-независимой графики. Именно через эту структуру подпрограммы GDI взаимодействуют с драйвером графического устройства. Эта структура содержит основные характеристики устройства, а также различные средства отображения – кисти, карандаши, цвета, шрифты и т.д. Драйвер того устройства, которое используется для отображения информации, преобразует вызовы аппаратно-независимых подпрограмм GDI в команды конкретного устройства.

Рассмотренный подход, делает прикладную программу и саму операционную систему аппаратно-независимыми и позволяет им работать на компьютерах с различной аппаратной конфигурацией. Главное условие – наличие драйвера для имеющихся устройств ввода-вывода.

При работе в MS-DOS программа, использующая полноэкранный режим вывода информации, может выводить текст в любую часть экрана. Поскольку система однозадачная, то все, что программа вывела на экран, там и останется и никуда не исчезнет. Программе уже не нужна информация, необходимая для повторного вывода информации на экран. Если другая программа (например, резидентная) закроет часть экрана, тогда эта резидентная программа и должна, после завершения своей работы, восстановить содержимое экрана.

В Windows можно выводить информацию только в рабочую область окна, и вы не можете быть уверены в том, что там что-нибудь будет оставаться, до тех пор, пока ваша программа специально не выведет что-нибудь поверх. Например, окно диалога другого приложения может перекрыть часть рабочей области. Хотя Windows будет пытаться сохранить и восстановить область экрана под окном диалога, это не всегда получается. После того как окно диалога удаляется с экрана, Windows выдаст запрос, требующий, чтобы ваша программа перерисовала эту часть рабочей области.

Windows — это операционная система, управляемая сообщениями. Windows уведомляет приложения о различных событиях путем постановки синхронных сообщений в очередь сообщений приложения или путем отправки асинхронных сообщений соответствующей процедуре окна. Посылая синхронное сообщение WM_PAINT, Windows уведомляет оконную процедуру о том, что часть рабочей области окна необходимо обновить.

Программирование в OS Windows

Любое оконное приложение, написанное под Windows должно содержать в себе следующие элементы:

Функцию регистрации класса окна.

Функцию создания окна.

Оконную процедуру.

Цикл обработки сообщений.

Далее по тексту приводится пример простейшей программы под Windows, которая выводит на экран окно приложения с надписью "Привет, друзья!". Данную программу необходимо взять за основу при решении своего варианта задания. Программа содержит, все необходимые для понимания ее работы, комментарии.

#include <windows.h> // подключение библиотеки с функциями API

// Глобальные переменные:

HINSTANCE hInst; // Указатель приложения

// Предварительное описание функций

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

// Основная программа

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

MSG msg;

// Регистрация класса окна

MyRegisterClass(hInstance);

// Создание окна приложения

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

// Цикл обработки сообщений

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

// FUNCTION: MyRegisterClass()

// Регистрирует класс окна

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW; // стиль окна

wcex.lpfnWndProc = (WNDPROC)WndProc; // оконная процедура

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance; // указатель приложения

wcex.hIcon = MyIcon1; // определение иконки

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

// определение курсора

wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);

// установка фона

wcex.lpszMenuName = NULL; // определение меню

wcex.lpszClassName = szWindowClass; // имя класса

wcex.hIconSm = NULL;

return RegisterClassEx(&wcex); // регистрация класса окна

}

// FUNCTION: InitInstance(HANDLE, int)

// Создает окно приложения и сохраняет указатель приложения в переменной hInst

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // сохраняет указатель приложения в переменной hInst

hWnd=CreateWindow(szWindowClass, // имя класса окна

szTitle, // имя приложения

WS_OVERLAPPEDWINDOW, // стиль окна

CW_USEDEFAULT, // положение по Х

CW_USEDEFAULT, // положение по Y

CW_USEDEFAULT, // размер по Х

CW_USEDEFAULT, // размер по Y

NULL, // описатель родительского окна

NULL, // описатель меню окна

hInstance, // указатель приложения

NULL); // параметры создания.

if (!hWnd) // Если окно не создалось, функция возвращает FALSE

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow); // Показать окно

UpdateWindow(hWnd); // Обновить окно

while(GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)

// Оконная процедура. Принимает и обрабатывает все

// сообщения, приходящие в приложение

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

PAINTSTRUCT ps;

HDC hdc;

RECT rt;

switch (message)

{

case WM_CREATE: // Сообщение приходит при создании окна

break;

case WM_PAINT: // Перерисовать окно

hdc = BeginPaint(hWnd, &ps); // Начать графический вывод

GetClientRect(hWnd, &rt); // Область окна для рисования

DrawText(hdc, " Привет, друзья!", -1, &rt,

DT_SINGLELINE|DT_CENTER | DT_VCENTER);

EndPaint(hWnd, &ps); // Закончить графический вывод

break;

case WM_DESTROY: // Завершение работы

PostQuitMessage(0);

break;

default:

// Обработка сообщений, которые не обработаны пользователем

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

Подробное описание параметров функций регистрации, создания окна и оконной процедуре можно узнать при помощи MSDN.

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

Итак, Windows. Пожалуй, это самая распространенная операционная система для PC. Она обладает собственным графическим интерфейсом и берет на себя большинство задач по обработке графики. Во времена текстовой системы DOS, если была нужна программа с графическим интерфейсом, приходилось программировать его самостоятельно, так же, как и работать с выводом графики. (Программисты напрямую работали с видеопамятью машины, используя низкоуровневый язык Ассемблер). Сейчас же можно сравнительно просто создавать программы со стандартным графическим интерфейсом Windows (кнопки, меню, полосы прокрутки) - достаточно вызвать соответствующие функции Windows API.

API это сокращение от application programming interface, то есть интерфейс программирования приложений. Он представляет собой набор функций, вызывая которые из нашей программы, мы обращаемся к динамически подключаемым библиотекам (.DLL файлы), реализующим те или иные действия.

1. Тема: “ Контекстно –независимый вывод текстовой информации”

1. 1 Цель

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

1. 2. Методические указания для подготовки к работе

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

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

Изучить формат структуры LOGFONT и параметры шрифтов и правила применения структуры управления шрифтами, цветом.

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

Итак, Windows. Пожалуй, это самая распространенная операционная система для PC. Она обладает собственным графическим интерфейсом и берет на себя большинство задач по обработке графики. Во времена текстовой системы DOS, если была нужна программа с графическим интерфейсом, приходилось программировать его самостоятельно, так же, как и работать с выводом графики. (Программисты напрямую работали с видеопамятью машины, используя низкоуровневый язык Ассемблер). Сейчас же можно сравнительно просто создавать программы со стандартным графическим интерфейсом Windows (кнопки, меню, полосы прокрутки) - достаточно вызвать соответствующие функции Windows API.

API это сокращение от application programming interface, то есть интерфейс программирования приложений. Он представляет собой набор функций, вызывая которые из нашей программы, мы обращаемся к динамически подключаемым библиотекам (.DLL файлы), реализующим те или иные действия.

1. Тема: “ Контекстно –независимый вывод текстовой информации”

1. 1 Цель

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

1. 2. Методические указания для подготовки к работе

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

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

Изучить формат структуры LOGFONT и параметры шрифтов и правила применения структуры управления шрифтами, цветом.

При подготовке к работе необходимо изучить методические указания, теоретические сведения данного методического пособия (1. 3) а также разделы, указанные в [16, c.4-52], [17, c.7-26], [16, c.57-62], [17, c.28-32].

1. 3. Краткие теоретические сведения

Для вывода текстовой информации в составе OS Windows имеются специальные инструментальные средства:

- информационные структуры – Шрифты (Fonts).

- системные подпрограммы для вывода текста с использованием контекста графического устройства.

Контекст устройства (32-разрядное беззнаковое целое) фактически является структурой данных, которая поддерживается GDI.

Некоторые значения в контексте устройства являются графическими атрибутами. Например, цвет текста, цвет фона для текста, шрифт - эти параметры являются частью контекста устройства. Когда их необходимо изменить один из этих атрибутов, вызывают функцию, изменяющую значение атрибута в контексте устройства.

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

Получение описателя контекста устройства

Существует несколько методов получения описателя (дескриптора) контекста устройства.

Наиболее общий метод получения контекста устройства и его освобождения состоит в использовании системных функций BeginPaint и EndPaint при обработке сообщения WM_PAINT:

hdc = BeginPaint (hwnd, &ps);

[другие строки программы]

EndPaint(hwnd, &ps);

где переменная ps - структура типа PAINTSTRUCT. PAINTSTRUCT ps;

Это структура определяется так:

typedef struct tagPAINTSTRUCT

{

HDC hdc;

BOOL fErase;

RECT rcPaint;

BOOL fRestore;

BOOL fIncUpdate;

BYTE rgbReserved[32];

} PAINTSTRUCT;

В программе можно использовать только первые три поля этой структуры. Остальные используются Windows.

Первое поле hdc - это описатель контекста устройства, который кроме того еще и возвращается функцией BeginPaint.

Второе поле fErase - задает Windows обновление (флаг TRUE) фона недействительного прямоугольника с использованием кисти, заданной в структуре класса окна (wndclass).

Третье поле rcPaint - структура типа RECT (прямоугольник), определяющая прямоугольную область, содержащую недействительный регион клиентской (рабочей) области окна. Получив описатель контекста устройства, можно рисовать только в пределах этого региона. Функция BeginPaint делает этот регион действительным. Эти координаты можно получить в любое другое время, вызвав функцию GetUpdateRect.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]