Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПро - методичка.pdf
Скачиваний:
30
Добавлен:
16.03.2016
Размер:
847.14 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ ХАРКІВСЬКИЙ ДЕРЖАВНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ

До друку та у світ дозволяю Проректор по навчальній роботі В.В. Семенець

"____" ___________1999 г.

МЕТОДИЧНІ ВКАЗІВКИ ДО ЛАБОРАТОРНИХ РОБІТ ПО КУРСУ

"СИСТЕМНЕ ПРОГРАМУВАННЯ "

для студентів денної форми навчання фаху: 7091501 “Комп'ютерні системи та мережі”; 7091502 “Системне програмування”; 7091503 “Спеціалізовані комп'ютерні системи“.

Всі цитати, цифровий і фактичний матеріал та бібліографічні відомості перевірені, написання одиниць відповідає стандартам

Упорядники:

Волк М.О.

Затверджено каф. ЕОМ

протокол N

від __.__.200 р.

Відповідальний за випуск

Харків ХТУРЕ 2006

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ

ХАРКІВСЬКИЙ ДЕРЖАВНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ

МЕТОДИЧНІ ВКАЗІВКИ ДО ЛАБОРАТОРНИХ РОБІТ ПО КУРСУ

"СИСТЕМНЕ ПРОГРАМУВАННЯ "

для студентів денної форми навчання фаху: 7091501 “Комп'ютерні системи та мережі”; 7091502 “Системне програмування”; 7091503 “Спеціалізовані комп'ютерні системи“.

Затверджено каф. ЕОМ

протокол N

від __.__.2007 р.

Харків ХТУРЕ 2006

Методичні вказівки до лабораторних робіт по курсу “Системне програмування” для студентів денної форми навчання /Упоряд. Волк М.О. – Харків: ХТУРЕ, 2006. – с. – Укр.мовою.

Упорядники: М.О. Волк.

ОБЩИЕ ПОЛОЖЕНИЯ

Данные методические указания предназначены для проведения лабораторных работ по курсу “Системное программирование”. Лабораторные работы введены в учебный процесс на основании учебных планов по вышеупомянутым учебным планам и проводятся в 3-м та 4-м семестре с целью обучения на практике проектированию, написанию и отладки программ системного уровня.

Методические указания содержат описание 9 лабораторных работ. Каждый раздел, соответствующий отдельной лабораторной работе, состоит из таких подразделов: цель работы, указания по подготовке к выполнению лабораторной работы, сущность работы, варианты заданий, контрольные вопросы и задания.

1. Описание лабораторной установки

При выполнении всех лабораторных работ используется единая конфигурация программно-аппаратных средств: ПЭВМ типа IBM-PC с процессором не ниже Pentium100, операционная система Windows95-98 или Windows NT, Microsoft Visual C++ v.6.0 и старше, стандартные библиотеки функций Windows (Application Programming Interface) API и классов Microsoft Foundation Classes (MFC).

2. Порядок выполнения работы

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

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

Выполнение работы включает следующие этапы:

1)Подготовительный этап (до проведения лабораторной работы):

а) получение задания согласно данного методического указания, номера варианта и требований преподавателя; б) изучение теоретического материала по теме лабораторной работы;

в) разработка алгоритма и черновика программы;

2)Непосредственное создание программы в компьютерном классе вычислительного центра:

а) прохождение допуска к лабораторной работе (обсуждение с преподавателем предлагаемого решения задачи);

б) написание программы с использованием Microsoft Visual C++ v.6.0;

в) отладка программы; г) проверка правильности выполнения задания (тестирование).

3)Выполнение отчета и защита лабораторной работы.

3.Содержание отчета

Отчет должен содержать:

-титульный лист с наименованием лабораторной работы и данными исполнителя;

-цель работы;

-задание;

-описание алгоритма решения поставленной задачи;

-текст программы с комментариями и пояснениями;

-результаты работы программы и их анализ;

-выводы;

Все материалы отчета необходимо сброшюровать, страницы пронумеровать.

4. Оценивание выполнения работы

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

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

1 СТРУКТУРА WINDOWS – ПРИЛОЖЕНИЙ. ОКОННАЯ ПРОЦЕДУРА. ОБРАБОТКА СООБЩЕНИЙ. ФАЙЛ РЕСУРСОВ.

1.1 Цель работы

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

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

1.2 Указания по подготовке к выполнению лабораторной работы

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

При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.4-52], [17, c.7-26], [16, c.441-469], [17, c.25-27].

1.3 Обзор темы работы

Любое оконное приложение, написанное под Windows должно содержать

всебе следующие элементы:

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

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

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

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

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

#include <windows.h>

// подключение библиотеки с функциями API

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

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

LPCTSTR szWindowClass = "QWERTY";

LPCTSTR szTitle = "ПЕРВАЯ ПРОГРАММА";

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

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

= LoadIcon(NULL, IDI_HAND);

// опре-

деление иконки

 

 

 

wcex.hCursor

= LoadCursor(NULL, IDC_ARROW); // опреде-

ление курсора

 

 

wcex.hbrBackground

= GetSysColorBrush(COLOR_WINDOW); // уста-

новка фона

 

 

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);

// Обновить окно

return TRUE;

//Успешное завершение функции

}

//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 или Win32 Programmer's Reference, установленных на рабочих местах.

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

В большинство программ для Windows включаются пользовательские значки (например, пользователь видит их на экране в левом углу строки заголовка окна приложения), курсоры (при передвижении мыши вид курсора меня-

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

Для выполнения лабораторной работы необходимо изучить следующие виды ресурсов: иконки (icons), курсоры (cursors), битовые образы (bitmaps), символьные строки (character strings), меню (menus), быстрые клавиши (keyboard accelerators), окна диалога (dialog boxes), ресурсы пользователя (user defined resources), – а также набор функций API работы с ресурсами.

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

Особое внимание следует уделить следующим группам функций API:

Чтения объектов из ресурсов (LoadCursor, LoadIcon, LoadString, LoadResource, LoadBitmap, LoadMenu)

Создания объектов (см. пп.3, 4).

Выбора объекта в контекст (SelectObject).

Управления объектами: например, для меню существует группа функций изменения меню в процессе выполнения программы (AppendMenu, DeleteMenu, InsertMenu, ModifyMenu, RemoveMenu, GetSubMenu и т.п.).

Управления диалоговыми окнами (DialogBox).

Одним из широко используемых видов ресурса являются описатели диалоговых окон. Диалоговые окна бывают модальными и немодальными. Наиболее часто используются модельные окна. Эти окна не дают пользователю работать с другими окнами приложения, но разрешают переключаться на работу с другими приложениями. Для того чтобы пользователь мог продолжить работу с приложением, необходимо завершить работу с диалоговым окном. Немодальные диалоговые окна не требуют своего завершения для продолжения работы, и пользователь может во время работы с ними свободно переключаться на любое окно приложения и другие приложения.

1.4 Задание на лабораторную работу

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

Вариант 1 Стиль класса: перерисовка окна при изменении вертикального размера;

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

Тип загружаемой иконки: IDI_APPLICATION. Тип загружаемого курсора: IDC_ARROW. Цвет фона окна: БЕЛЫЙ.

Имя класса окна: имя студента (на английском языке). Стиль окна:

а) окно имеет заголовок, обрамляющую рамку и горизонтальную полосу прокрутки, создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: верхний угол в координатах (10,30) и высотой 300, шириной 400 точек.

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

Вариант 2 Стиль класса: перерисовка окна при изменении горизонтального размера;

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

Тип загружаемой иконки: IDI_INFORMATION. Тип загружаемого курсора: IDC_WAIT.

Цвет фона окна: СВЕТЛОСЕРЫЙ.

Имя класса окна: фамилия студента (на английском языке). Стиль окна:

а) у окна есть кнопка минимизации и вертикальная полоса прокрутки, создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: в центре экрана шириной 400 высотой 250 точек.

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

Вариант 3 Стиль класса: перерисовка окна при изменении вертикального размера;

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

Тип загружаемой иконки: IDI QUESTION. Тип загружаемого курсора: IDC_CROSS. Цвет фона окна: СЕРЫЙ.

Имя класса окна: имя студента (на английском языке). Стиль окна:

а) у окна есть системное меню и кнопка минимизации; создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: с координатами (150, 200, 480, 500).

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

Вариант 4 Стиль класса: запретить команду «закрыть» в системном меню; посылать

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

Тип загружаемой иконки: IDI QUESTION. Тип загружаемого курсора: IDC_SIZE. Цвет фона окна: ТЕМНОСЕРЫЙ.

Имя класса окна: имя студента (на английском языке). Стиль окна:

а) у окна есть горизонтальная линейная прокрутки и системное меню; создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: верхний угол в координатах (50,90) и высотой 500, шириной 400 точек.

Создать свои две иконки и два курсора в ресурсном файле. Обеспечить при помощи меню смену иконок и курсоров приложения.

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

Вариант 5 Стиль класса: посылать сообщение оконной процедуре при двойном

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

Тип загружаемой иконки: IDI_ERROR. Тип загружаемого курсора: IDC_ARROW. Цвет фона окна: ЧЕРНЫЙ.

Имя класса окна: имя студента (на английском языке). Стиль окна:

а) у окна есть вертикальная линейка прокрутки и заголовок; создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: по нижнему краю экрана шириной 300 точек и высотой 200 точек.

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

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

Вариант 6 Стиль класса: выравнивание клиентской области по горизонтали, пере-

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

Тип загружаемой иконки: IDI_INFORMATION. Тип загружаемого курсора: IDC_NO.

Цвет фона окна: БЕЛЫЙ.

Имя класса окна: фамилия студента (на английском языке). Стиль окна:

а) создается изначально минимизируемое окно; у окна есть заголовок и рамка;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: по верхнему краю экрана шириной 400 точек и высотой

500точек

Вресурсный файл поместить иконку, курсор и строку текста. С помощью меню организовать смену заголовка окна, курсора и иконки приложения.

Также программа должна содержать меню, в котором есть пункт "О программе", выбрав который, пользователь получает информацию о создателе программы.

Вариант 7 Стиль класса: запретить команду «закрыть» в системном меню; перери-

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

Тип загружаемой иконки: IDI_APPLICATION. Тип загружаемого курсора: IDC_HELP.

Цвет фона окна: СВЕТЛОСЕРЫЙ.

Имя класса окна: имя студента (на английском языке) Стиль окна:

а) окно имеет заголовок и обрамляющую рамку, у окна есть кнопка минимизации, у окна есть системное меню; создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: по левому краю экрана шириной 500 и высотой 200 точек. С помощью меню организовать смену размера окна приложения, цвет

фона и строку заголовка.

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

Вариант 8 Стиль класса: посылать сообщение оконной процедуре при двойном

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

Тип загружаемой иконки: IDI QUESTION.

Тип загружаемого курсора: IDC_ARROW. Цвет фона окна: СЕРЫЙ.

Имя класса окна: фамилия студента (на английском языке). Стиль окна:

а) у окна есть горизонтальная и вертикальная линейки прокрутки; создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: по правому краю экрана шириной 450 и высотой 440 точек Определить в файле ресурсов «горячие клавиши» для смены строки заго-

ловка иконки приложения и размера окна.

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

Вариант 9 Стиль класса: запретить команду «закрыть» в системном меню; посылать

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

Тип загружаемой иконки: IDI_ERROR. Тип загружаемого курсора: IDC_CROSS. Цвет фона окна: ТЕМНОСЕРЫЙ.

Имя класса окна: имя студента (на английском языке). Стиль окна:

а) окно имеет заголовок и обрамляющую рамку; у окна есть кнопка минимизации; у окна есть системное меню; создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: в центре экрана шириной 550 высотой 350 точек.. Определить в файле ресурсов "горячие клавиши" для смены вида курсора,

цвета фона окна приложения и размера окна.

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

Вариант 10 Стиль класса:

запретить команду «закрыть» в системном меню; посылать сообщение оконной процедуре при двойном щелчке перерисовка окна при изменении вертикального размера.

Тип загружаемой иконки: IDI_ QUESTION. Тип загружаемого курсора: IDC_CROSS. Цвет фона окна: БЕЛЫЙ.

Имя класса окна: фамилия студента (на английском языке). Стиль окна:

а) окно имеет заголовок и обрамляющую рамку; у окна есть кнопка минимизации; у окна есть системное меню; создается изначально минимизируемое окно;

б) WS_OVERLAPPEDWINDOW.

Позиция окна: в центре экрана шириной 220 высотой 150 точек.

В меню программы предусмотреть замену курсора, иконки, фона окна и заголовка.

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

1.5Контрольные вопросы и задания

1.В чем заключается объектно-ориентированный подход к программиро-

ванию?

2.Раскройте особенности архитектуры, управляемой событиями.

3.Каково назначение оконной процедуры приложения?

4.Опишите основные этапы создания окна приложения.

5.Объясните смысл цикла обработки сообщений.

6.Каким образом происходит обработка сообщений в приложениях

Windows?

7.Раскройте сущность синхронных и асинхронных сообщений.

8.Каким образом формируются сообщения?

9.Поясните особенности формирования сообщения WM_PAINT. Что такое действительные и недействительные прямоугольники.

10.Какие системные сообщения вы знаете?

11.Какие виды ресурсов вы знаете?

12.Каким образом создаются ресурсы?

13.Опишите процесс использования ресурсов.

14.Каким образом можно использовать альтернативные ресурсы?

15.Что необходимо сделать, чтобы заменить иконку программы и ее

трей?

16.Какие функции работы с иконками Вы знаете?

17.Как использовать символьные строки, объявленные в ресурсах?

18.Дайте характеристику «меню». Какие виды меню Вы знаете?

19.Каким образом можно создавать меню?

20.Опишите процесс использования битовых образов в меню.