Проектирование и реализация интерфейса пользователя (меню на Си)
Рефераты >> Программирование и компьютеры >> Проектирование и реализация интерфейса пользователя (меню на Си)

♦ ВВЕРХ – находимся в главном меню – открываем подменю выделенного пункта. Если же мы находимся в подменю – перемещаем курсор вверх (или переходим в конец списка, если была достигнута вершина).

♦ ВПРАВО – в главном меню просто двигаем выделение вправо. Если мы находимся в подменю и выделенный пункт еще может раскрыться, то раскрываем его. Если же пункт не раскрываем, переходим к следующему пункту главного меню, сохраняя отрытое подменю.

♦ ВНИЗ – работает аналогично ВВЕРХ.

♦ ENTER – если мы стоим на пункте с подменю – открываем пункт. Если пункт не содержит подменю, выдаем диалоговое окно с названием пункта, при этом закрывая все меню до главного.

♦ ESC – выход из программы.

Фактически, структура меню реализована двунаправленным динамическим списком, это обеспечивает экономный расход памяти.

Результаты и их анализ.

Программа работает корректно и в соответствии с характеристикой.

Структура системы меню.

Просмотр

Настройка

Печать

Открыть

Закрыть

Сохранить

Печать

Выход

Подпись: Файл ПомощьВ задании к работе для каждого варианта указана своя собственная система меню. Обрисуем общие принципы. Уровень вложенности для каждого варианта – двукратный. В принципе, для проверки понимания способов графического построения меню этого достаточно. Да и реальные меню редко превосходят двойной уровень вложенности (хотя теоретически, он может быть неограниченным). Это иллюстрируется на рисунке. Верхний уровень представлен главным меню (и это всегда только полоска, не превышающая по длине экран). Второй уровень – меню, выпадающее «вниз» от главного. Тут уже приходится следить за попаданием в экран не только по ширине, но и по высоте. Третий (и последующие) уровни выпадают «вбок», и для них тоже необходимо проверять попадание в экран и сдвигать их при необходимости.

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

Файл

Новый

Открыть

Программу

Проект

Печать

Программы

Проекта

Параметры страницы

Предварительный просмотр

Установки принтера

Правка

Поиск

Поиск вперед

Поиск назад

Поиск и замена

Переход

Стили

Основной текст

Комментарий

Заголовок

Ссылка

Очистить

Вставить объект

Из файла

Таблица

Диаграмма

Со сканнера

Сноска

Выделить все

Вид

Документ

Обычный

Разметка

Синтаксическая подсветка

Показывать ссылки

Среда

Панели инструментов

Окно отладчика

Окно процессора

Сервис

Совместная работа

Сверить версии

Сформировать апдейт

Сопроводительная информация

Подключить модуль

Список сотрудников

Авто-подсказки

Макросы

Список

Записать

Отредактировать

Язык

Изменить основной язык

Добавить язык к проекту

Отладка

Компилировать

Точки останова

Установить/сбросить

Перейти к следующей

Сбросить все

Отследить значение переменной

Пошаговое выполнение

Через

Внутрь

Выполнить

До курсора

Итерацию

До конца блока

До конца модуля

Справка

О программе

Помощь по среде

Содержание

Интерфейс

Меню

Горячие клавиши

Помощь по языку

Содержание

Поиск

Помощь по контексту

Он-лайн

Официальный сервер

Неофициальные страницы

Эта иерархия удовлетворяет следующей таблице:

3

6

2

4

5

4

2,2

3,5

1,3

3,4

5,5

1,4

2,3

1,5

3,3

4,2

2,3

4,2

5,4

2,4

3,3

4,2

Это означает, что главное меню должно содержать 6 пунктов. Первый пункт содержит, в свою очередь, 3 пункта. Второй пункт раскрывается в 2, третий в 5 пунктов. И т.д.

Текст программы

#include <iostream.h>

#include <conio.h>

#include <graphics.h>

void fillscreen()

{

int i;

setcolor(CYAN); // Заполняем экран цветом

for (i=0;i<480;i++)

line(0,i,639,i);

setcolor(6); // Выводим информацию о программе

outtextxy(20,453,"Курсовая работа студента группы ПМ-92 Мульцына Константина");

outtextxy(20,465,"программа написана на языке Си++ с использованием принципов ООП");

}

void draw_window(int x1, int y1, int x2, int y2)

{ // Функция рисует окошко с тенью

int i; // фиксированного набора цветов

setcolor(LIGHTGRAY);

for (i=0; i<=y2-y1; i++)

line(x1,y1+i,x2,y1+i);

setcolor(BLACK);

line(x1+2,y1+2,x2-2,y1+2); // вывод рамки

line(x1+2,y2-2,x2-2,y2-2);

line(x1+2,y1+2,x1+2,y2-2);

line(x2-2,y1+2,x2-2,y2-2);

setcolor(DARKGRAY);

line(x1+2,y2+1,x2+2,y2+1); // вывод тени

line(x1+2,y2+2,x2+2,y2+2);

line(x2+1,y1+2,x2+1,y2+2);

line(x2+2,y1+2,x2+2,y2+2);

}

void ShowDialog(char* text) // демонстрирует небольшое диалоговое окно

{

int w,ch;

draw_window(130,130,510,240); // выводим окно

w=textwidth("Радостная информация")+10;


Страница: