Министерство образования Республики Беларусь
Министерство образования и науки Российской Федерации
Государственное учреждение высшего профессионального образования «Белорусско-Российский университет»
Кафедра “Автоматизированные системы управления”
Средства взаимодейсвия человека с вычислительной системой
Методические указания к выполнению контрольной работы
для студентов заочного факультета специальности 1-53 01 02 –
“Автоматизированные системы обработки информации”
Могилев 2010
УДК 004.42:004.43
ББК 32.97
Рекомендовано к опубликованию
учебно-методическим управлением
ГУВПО «Белорусско-Российский университет»
Одобрено кафедрой «АСУ» «___» 2010 г., протокол №
Составитель ст. преподаватель Ю. В. Вайнилович
Рецензент к.т.н., доц. В. А. Широченко
Средства взаимодействия человека с вычислительной системой. Методические указания к лабораторным и контрольным работам для студентов специальности 1-53 01 02 – “Автоматизированные системы обработки информации”. – Могилев: Белорусско-Российский университет, 2007. – 32 с. Методические указания составлены в соответствии с программой дисциплины “Средства взаимодействия человека с вычислительной системой”
Учебное издание
СРЕДСТВА ВЗАИМОДЕЙСТВИЯ ЧЕЛОВЕКА С ВЫЧИСЛИТЕЛЬНОЙ СИСТЕМОЙ
Ответственный за выпуск
Технический редактор
Компьютерная верстка
Подписано в печать Формат 60×84 1/ 16 Бумага офсетная. Гарнитура Таймс.
Печать трафаретная. Усл. печ. л. Уч.-изд. л. Тираж экз. Заказ №
Издатель и полиграфическое исполнение:
Государственное учреждение высшего профессионального образования
«Белорусско-Российский университет»
ЛИ № 02330/375 от 29.06.2004г.,
212005, г. Могилев, пр. Мира, 43.
© ГУВПО «Белорусско-Российский
университет», 2007
1 Пример постановки задачи
На рисунке изображены кривые Серпинского 1 и 2 порядков. Составьте программу построения кривых 1, 2, 3, 4 и 5 порядков, так что центры этих кривых совпадают.
Требования:
1. Через пункты главного меню должны быть доступны следующие действия:
* Параметры: Толщина, Порядок, Сепараторная линия, Цвет (стандартная панель).
* Рисование: Отобразить, Скрыть, Мерцание, Скорость (показывает диалоговую панель).
* Справка: О программе (выводит идентификационную панель), Справочник (вход в справочник);
* Выход (завершает работу программы).
2. Пункты меню Толщина, Порядок выполнить в виде зависимых переключателей, пункт меню Мерцание при выборе помечать «галочкой».
3. Пункты меню продублировать кнопками панели инструментов. Организовать всплывающие подсказки.
4. Организовать всплывающее меню, дублирующее пункт «Рисование» главного меню.
5. Создать строку состояния, в которой отображать следующие данные: порядок кривой, толщину линии.
6. Подключить обработку клавиш «+» и «-» масштабирующих график в целом с шагом 10%.
7. Диалоговая панель «Скорость»: скорость перерисовки выбирается радиопереключателями. Предусмотреть значения по умолчанию.
8. Диалоговое окно «О программе …» должно появляться при выборе соответствующего пункта меню. Представляет собой идентификационную панель (указать сведения об авторе: фамилия, группа, курс).
9. Продублировать пункты главного меню клавишами-акселераторами.
10. Разработать справку, описывающую возможности программы. Справка должна обязательно содержать ссылки (ассоциативные, по ключевому слову, перехода), кнопки, статичные графические изображения. Справка должна вызываться при выборе соответствующего пункта меню.
2 Требования к отчету
При оформлении контрольной работы следует придерживаться следующих требований:
Работа выполняется на листах А4 машинописным способом (шрифт 12-14, межстрочный интервал - одинарный). Следует пронумеровать страницы и оставить на них поля: справа – не менее 3 см для замечаний преподавателя, остальные поля – 2,5 см.
На титульном листе указываются шифр, специальность, фамилия, имя, отчество студента, дисциплина и номер работы, номер группы.
Вставляемые фрагменты программного кода должны быть структурированы при помощи отступов, пустых строк или иных разделителей.
Рисунки должны быть подписаны. На них должна иметься ссылка в тексте работы.
Отчет состоит из следующих разделов:
Описание обрабатываемых сообщений;
Разработка системы меню;
Ресурсы;
Справочная система.
В разделе «Описание обрабатываемых сообщений» требуется перечислить все сообщения, обрабатываемые в оконной функции главного окна приложения, указать действия, программируемые в данном сообщении и привести пример. Для примера из программного кода нужно выбрать строки, относящиеся только к приводимому примеру. Каждый отдельно взятый пример из отчета должен быть рабочим (т. е. при копировании примера в программу в соответствующее сообщение он должен работать).
То есть, требуется дать краткий комментарий программному коду.
В разделе «Разработка системы меню» привести схему главного меню, указать способы реализации отдельных пунктов (зависимые переключатели, независимые переключатели, динамические т. д.).
Также следует описать другие виды меню, если они есть.
В разделе «Ресурсы» требуется описать содержимое файла ресурсов (имеет расширение .rc), а также ресурсы, создаваемые в основной программе (клавиши-акселераторы, панели инструментов и т.д.).
В разделе «Справочная система». В данном разделе требуется описать все инструменты, использованные для разработки справки. Привести файл проекта справки (имеет расширение .hpj).
3 Пример отчета
3.1 Описание обрабатываемых сообщений
Например, вот полный программный код для сообщения WM_CREATE:
case WM_CREATE:
{
DRAW = true ;
ANIMATE = false ;
DRAW_SPEED = 0 ;
LENGTH = 10 ;
GRADE = 3 ;
THICKNESS = 1 ;
COLOR_RED = 30 ;
COLOR_GREEN = 110 ;
COLOR_BLUE = 160 ;
hMainMenu = CreateMenu() ;
hParamMenu = CreatePopupMenu() ;
hThicknessMenu = CreatePopupMenu() ;
hGradeMenu = CreatePopupMenu() ;
hDrawMenu = CreatePopupMenu() ;
hHelpMenu = CreatePopupMenu() ;
hPopupMenu = CreatePopupMenu() ;
CreateMenuItem(hPopupMenu,"Отобразить",0, IDC_DRAW_A, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hPopupMenu,"Скрыть", 1, IDC_DRAW_B, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hPopupMenu, NULL, 2, 0, NULL, FALSE, MFT_SEPARATOR) ;
CreateMenuItem(hPopupMenu, "&Цвет", 3, IDC_PARAM_COLOR, NULL, FALSE, MFT_STRING) ;
CreateMenuItem(hPopupMenu, NULL, 4, 0, NULL, FALSE, MFT_SEPARATOR) ;
CreateMenuItem(hPopupMenu, "&Мерцание",5, IDC_DRAW_ANIMATE, NULL, TRUE, MFT_STRING) ;
CreateMenuItem(hThicknessMenu, "&1", 0, IDC_PARAM_THICK_A, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hThicknessMenu, "&2", 1, IDC_PARAM_THICK_B, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hThicknessMenu, "&3", 2, IDC_PARAM_THICK_C, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hThicknessMenu, "&4", 3, IDC_PARAM_THICK_D, NULL, FALSE, MFT_RADIOCHECK) ;
SetMenuItem(hThicknessMenu, IDC_PARAM_THICK_A, MFS_CHECKED, FALSE) ;
CreateMenuItem(hGradeMenu, "&1", 0, IDC_PARAM_GRADE_A, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hGradeMenu, "&2", 1, IDC_PARAM_GRADE_B, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hGradeMenu, "&3", 2, IDC_PARAM_GRADE_C, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hGradeMenu, "&4", 3, IDC_PARAM_GRADE_D, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hGradeMenu, "&5", 4, IDC_PARAM_GRADE_E, NULL, FALSE, MFT_RADIOCHECK) ;
SetMenuItem(hGradeMenu, IDC_PARAM_GRADE_C, MFS_CHECKED, FALSE) ;
CreateMenuItem(hParamMenu, "&Толщина", 0, IDC_PARAM_THICK, hThicknessMenu, FALSE, MFT_STRING) ;
CreateMenuItem(hParamMenu, "&Порядок", 1, IDC_PARAM_GRADE, hGradeMenu, FALSE, MFT_STRING) ;
CreateMenuItem(hParamMenu, NULL, 2, 0, NULL, FALSE, MFT_SEPARATOR) ;
CreateMenuItem(hParamMenu, "&Цвет", 3, IDC_PARAM_COLOR, NULL, FALSE, MFT_STRING) ;
//---------------------------------------------------------------------------//
CreateMenuItem(hMainMenu,"&Параметры", 0, IDC_CAP_PARAM, hParamMenu, FALSE, MFT_STRING) ;
//---------------------------------------------------------------------------//
CreateMenuItem(hDrawMenu, "&Отобразить", 0, IDC_DRAW_A, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hDrawMenu, "&Скрыть", 1, IDC_DRAW_B, NULL, FALSE, MFT_RADIOCHECK) ;
CreateMenuItem(hDrawMenu, NULL, 2, 0, NULL, FALSE, MFT_SEPARATOR) ;
CreateMenuItem(hDrawMenu, "&Мерцание", 3, IDC_DRAW_ANIMATE, NULL, TRUE, MFT_STRING) ;
CreateMenuItem(hDrawMenu, NULL, 4, 0, NULL, FALSE, MFT_SEPARATOR) ;
CreateMenuItem(hDrawMenu, "&Скорость", 5, IDC_DRAW_SPEED, NULL, TRUE, MFT_RADIOCHECK) ;
SetMenuItem(hDrawMenu, IDC_DRAW_A, MFS_CHECKED, FALSE) ;
//---------------------------------------------------------------------------//
CreateMenuItem(hMainMenu,"&Рисование", 1, IDC_CAP_DRAW, hDrawMenu, FALSE, MFT_STRING) ;
//---------------------------------------------------------------------------//
CreateMenuItem(hHelpMenu, "&О программе", 0, IDC_HELP_ABOUT, NULL, FALSE, MFT_STRING) ;
CreateMenuItem(hHelpMenu, "&Файл справки", 1, IDC_HELP_FILE, NULL, FALSE, MFT_STRING) ;
//---------------------------------------------------------------------------//
CreateMenuItem(hMainMenu,"&Справка", 2, IDC_CAP_HELP, hHelpMenu, FALSE, MFT_STRING) ;
//---------------------------------------------------------------------------//
CreateMenuItem(hMainMenu,"&Выход", 3, IDC_CAP_EXIT, NULL, FALSE, MFT_STRING) ;
//---------------------------------------------------------------------------//
SetMenu(hWindow,hMainMenu) ;
DrawMenuBar(hWindow) ;
hStatus = CreateStatusWindow(WS_CHILD | WS_VISIBLE, "", hWindow, IDC_STATUS) ;
SendMessage(hStatus, SB_SETTEXT, 0, (LONG)"Строка состояния") ;
Accelerators = CreateAcceleratorsTable() ;
if ( !Accelerators )
{
MessageBox(hwnd, "Ошибка при создании таблицы акселераторов!","Ошибка!",MB_OK | MB_ICONERROR) ;
PostQuitMessage(1) ;
}
hToolBar = CreateToolBar(hWindow) ;
return 0 ;
}
Вот что должно быть в отчете по этому сообщению.
Сообщение WM_CREATE возникает в момент создания окна. В данном сообщении создается главное меню. Ниже приведена часть программного кода, создающего пункт меню «Параметры»:
hMainMenu = CreateMenu() ;
hParamMenu = CreatePopupMenu() ;
CreateMenuItem(hParamMenu, "&Толщина", 0, IDC_PARAM_THICK, hThicknessMenu, FALSE, MFT_STRING) ;
CreateMenuItem(hParamMenu, "&Порядок", 1, IDC_PARAM_GRADE, hGradeMenu, FALSE, MFT_STRING) ;
CreateMenuItem(hParamMenu, NULL, 2, 0, NULL, FALSE, MFT_SEPARATOR) ;
CreateMenuItem(hParamMenu, "&Цвет", 3, IDC_PARAM_COLOR, NULL, FALSE, MFT_STRING) ;
SetMenu(hWindow,hMainMenu) ;
DrawMenuBar(hWindow) ;
Также создается строка состояния.
hStatus = CreateStatusWindow(WS_CHILD | WS_VISIBLE, "", hWindow, IDC_STATUS) ;
SendMessage(hStatus, SB_SETTEXT, 0, (LONG)"Строка состояния") ;
Для создания панели инструментов вызывается функция CreateToolBar(hWindow). В качестве параметра передается дескриптор окна, для которого создается панель инструментов. Панель инструментов состоит из 11 кнопок. Первые пять работают как радиопереключатели и позволяют выбирать порядок кривой, дублируют пункт меню Параметры/Линия. Шестая кнопка вызывает стандартную панель выбора цвета и дублирует пункт меню Параметры/Цвет. Следующие четыре кнопки позволяют выбирать толщину линии и дублируют пункт меню Параметры/ Толщина
Разработанная панель инструментов представлена на рисунке 1.
Рисунок 1 – Панель инструментов
Кроме того, создается таблица акселераторов путем вызова пользовательской функции CreateAcceleratorsTable() и осуществляется проверка ее корректного создания.
Рассмотрим в качестве примера сообщение WM_SIZE. Вот исходный программный код этого сообщения:
case WM_SIZE:
{
if ( hwnd == hWindow )
{
width = LOWORD(lParam) ;
height = HIWORD(lParam) ;
MoveWindow (hStatus, 0, 0, 0, 0, true) ;
MoveWindow (hToolBar, 0, 0, 0, 0, true) ;
InvalidateRect (hwnd, NULL, true) ;
}
break;
}
Вот как требуется объяснить этот код в отчете:
Сообщение WM_SIZE возникает при изменении размеров окна. В данном сообщении команды
MoveWindow (hStatus, 0, 0, 0, 0, true) ;
MoveWindow (hToolBar, 0, 0, 0, 0, true) ;
прижимают строку состояния к нижнему краю окна, а панель инструментов - к верхнему при изменении размеров окна.
Команды
width = LOWORD(lParam) ;
height = HIWORD(lParam) ;
определяют текущую ширину и высоту окна.
И т. д. для всех остальных сообщений.
3.2 Разработка системы меню
Система меню представлена на рисунке 2. Выпадающие подменю пунктов «Толщина» и «Порядок», а также пункты «Скрыть» и «Отобразить» выполнены как зависимые переключатели, пункт «Мерцание» выполнен как независимый переключатель (т. е. при выборе помечается флажком).
При выборе пунктов меню «Скорость», «О программе» и «Справка» открываются диалоговые окна.
Рисунок 2 – Схема главного меню программы
Также реализовано контекстное меню, дублирующее пункт Рисование главного меню. Его вид представлен на рисунке 3.
Рисунок 3 – Вид контекстного меню