СРЕДСТВА ВЗАИМОДЕЙСВИЯ ЧЕЛОВЕКА С ВЫЧИСЛИТЕЛЬНОЙ СИСТЕМОЙ
Методические указания к выполнению контрольной работы
для студентов заочного факультета специальности 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 Требования к отчету
При оформлении контрольной работы следует придерживаться следующих требований:
1 Работа выполняется на листах А4 машинописным способом (шрифт 12-14, межстрочный интервал - одинарный). Следует пронумеровать страницы и оставить на них поля: справа – не менее 3 см для замечаний преподавателя, остальные поля – 2,5 см.
2 На титульном листе указываютсяшифр, специальность, фамилия, имя, отчество студента, дисциплина и номер работы, номер группы.
3 Вставляемые фрагменты программного кода должны быть структурированы при помощи отступов, пустых строк или иных разделителей.
4 Рисунки должны быть подписаны. На них должна иметься ссылка в тексте работы.
Отчет состоит из следующих разделов:
- Описание обрабатываемых сообщений;
- Разработка системы меню;
- Ресурсы;
- Справочная система.
В разделе «Описание обрабатываемых сообщений» требуется перечислить все сообщения, обрабатываемые в оконной функции главного окна приложения, указать действия, программируемые в данном сообщении и привести пример. Для примера из программного кода нужно выбрать строки, относящиеся только к приводимому примеру. Каждый отдельно взятый пример из отчета должен быть рабочим (т. е. при копировании примера в программу в соответствующее сообщение он должен работать).
То есть, требуется дать краткий комментарий программному коду.
В разделе «Разработка системы меню» привести схему главного меню, указать способы реализации отдельных пунктов (зависимые переключатели, независимые переключатели, динамические т. д.).
Также следует описать другие виды меню, если они есть.
В разделе «Ресурсы» требуется описать содержимое файла ресурсов (имеет расширение .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 – Вид контекстного меню
3.3 Ресурсы
В программе разработаны и используются следующие ресурсы:
- Кнопки панели инструментов (рисунок 4). Имеет идентификатор IDB_BITMAP3.
Рисунок 4 – Панель инструментов
- Диалоговая панель «О программе». Имеет идентификатор IDD_ABOUT. Вызывается при выборе пункта меню «Справка/О программа». Обработка вызова происходит в сообщении WM_COMMAND:
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_HELP_ABOUT:
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUT), hwnd, (DLGPROC)DlgAbout) ;
break ;
}
}
break ;
}
В оконной функции диалоговой панели DlgAbout() обрабатывается одно сообщение WM_LBUTTONDOWN. Оно возникает при щелчке левой клавишей мыши внутри рабочей области окна и приводит к его закрытию. Программный код оконной функции представлен ниже.
INT_PTR DlgAbout(HWND hDlgWnd,UINT DlgMessage,WPARAM wParam,LPARAM lParam)
{
switch (DlgMessage)
{
case WM_LBUTTONDOWN:
{
EndDialog(hDlgWnd, true) ;
return true ;
}
}
return false ;
}
Рисунок 5 – Диалоговое окно «О программе»
- Диалоговая панель «Скорость» (рисунок 6). Имеет идентификатор IDD_DIALOG1. Вызывается при выборе пункта меню «Рисование/Скорость». Обработка вызова происходит в сообщении WM_COMMAND:
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_HELP_ABOUT:
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, (DLGPROC)DlgSpeed) ;
break ;
}
}
break ;
}
Здесь также следует описать оконную функцию данного диалогового окна.
Рисунок 6 – Диалоговая панель «Скорость»
- Иконка для программы (рисунок 7). Имеет идентификатор IDI_ICON1.
Рисунок 7 – Программная иконка
- Клавиши-акселераторы. Акселераторы создаются в сообщении WM_CREATE, путем вызова пользовательской функции CreateAcceleratorsTable(). Код функции представлен ниже.
-
HACCEL CreateAcceleratorsTable()
{
ACCEL Accelerators[14];
Accelerators[0].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[0].key = '1' ;
Accelerators[0].cmd = IDC_PARAM_THICK_A ;
Accelerators[1].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[1].key = '2' ;
Accelerators[1].cmd = IDC_PARAM_THICK_B ;
Accelerators[2].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[2].key = '3' ;
Accelerators[2].cmd = IDC_PARAM_THICK_C ;
Accelerators[3].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[3].key = '4' ;
Accelerators[3].cmd = IDC_PARAM_THICK_D ;
Accelerators[4].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[4].key = 'Q' ;
Accelerators[4].cmd = IDC_PARAM_GRADE_A ;
Accelerators[5].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[5].key = 'W' ;
Accelerators[5].cmd = IDC_PARAM_GRADE_B ;
Accelerators[6].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[6].key = 'E' ;
Accelerators[6].cmd = IDC_PARAM_GRADE_C ;
Accelerators[7].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[7].key = 'R' ;
Accelerators[7].cmd = IDC_PARAM_GRADE_D ;
Accelerators[8].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[8].key = 'T' ;
Accelerators[8].cmd = IDC_PARAM_GRADE_E ;
Accelerators[9].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[9].key = 'C' ;
Accelerators[9].cmd = IDC_PARAM_COLOR ;
Accelerators[10].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[10].key = 'I' ;
Accelerators[10].cmd = IDC_DRAW_A ;
Accelerators[11].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[11].key = 'O' ;
Accelerators[11].cmd = IDC_DRAW_B ;
Accelerators[12].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[12].key = 'A' ;
Accelerators[12].cmd = IDC_DRAW_ANIMATE;
Accelerators[13].fVirt = FCONTROL | FVIRTKEY ;
Accelerators[13].key = 'X' ;
Accelerators[13].cmd = IDC_CAP_EXIT ;
return CreateAcceleratorTable(Accelerators,14) ;
}
Как видно из кода создаются 14 клавиш-акселераторов. Все они работают в сочетании в с клавишей CTRL. Для задания клавиш используется их виртуальный код, о чем говорит константа FVIRTKEY. Каждая клавиша связана с пунктом меню, чей идентификатор указан в поле cmd.
3.4 Справочная система
Справочная система разработана в формате .hlp. Вызывается при выборе пункта меню «Справка/Справка». Обработка вызова осуществляется в сообщении WM_COMMAND:
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_HELP_FILE:
{
WinHelp(hwnd,"Help.hlp",HELP_FINDER,NULL) ;
return 0 ;
}
}
break ;
}
Для удобства пользования справочником, разработано содержание, представленное на рисунке 8.
Рисунок 8 – Содержание справки
Также разработан предметный указатель, представленный на рисунке 9.
Рисунок 9 – Предметный указатель справки
Для удобной навигации были использованы ссылки перехода и графические кнопки. Оба элемента можно увидеть на рисунке 10.
Рисунок 10 – Страница справки с элементами управления
Содержание файла проекта справки представлено ниже.
[OPTIONS]
LCID=0x419 0x0 0x0 ; Русский
REPORT=Yes
CNT=HELP.cnt
HLP=HELP.hlp
[FILES]
HELP_SERP.rtf
Литература
1 Ганеев Р.М. Проектирование интерфейса пользователя средствами WIN 32 API. – М:Горячая линия-Телеков, 2001. – 336 с.
2 Гультяев А. Help. Разработка справочных систем. Учебный курс. – СПб: Питер, 2004. – 272 с.
3 Петзольд, Ч. Программирование для Windows 95. В двух томах. - СПб: BHV – Санкт-Петербург.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|