Смекни!
smekni.com

Организация интерфейса пользователя (стр. 2 из 4)

- переключатель (radiobutton), рис. 6, к;

- меню (menu), рис. 6, л;

- панель инструментов (toolbar), рис. 6, м.

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


а)

б)

в)

г)

д)

е)

ж)

з)

и)

к)

л)

м)

Рис.6. Компоненты интерфейса со свободной навигацией

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

Рис.7. Внешний вид интерфейса со свободной навигацией

Интерфейс данной программы состоит из трех полей ввода для коэффициентов a, b, c и кнопки «Выход». Пользователь может вводить значения в поля в произвольном порядке. После ввода значения программа автоматически пересчитывает корни квадратного уравнения и обновляет информацию на экране. Текущий элемент управления (поле ввода или кнопка) подсвечивается, как это принято во всех системах, допускающих навигацию с использованием клавиатуры.


3. Текстовый режим работы видеоадаптера

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

Рассмотрим подробнее работу видеоадаптера в текстовом режиме. Экран в текстовом режиме разбивается на столбцы и строки символов. Количество столбцов и строк зависит от установленного видеорежима. Размеры экрана для стандартных видеорежимов приведены в табл. 1. По умолчанию программы под MS-DOS работают в цветном видеорежиме 80×25 (C80), однако при запуске их под WindowsNT/2000/XP система предлагает по умолчанию видеорежим 80×50 (C4350). Для обеспечения корректной работы программ нужно либо устанавливать режим самостоятельно (функцией textmode), либо определять размеры экрана (функцией gettextinfo) и осуществлять вывод с учетом полученных значений.

Помимо перечисленных, в современных видеоадаптерах существуют режимы с шириной экрана, равной 132 символа. В этих режимах на экран помещается значительно больше информации. В то же время качество вывода текста практически не ухудшается, так как современные мониторы поддерживают значительно большие разрешения и имеют большие размеры экрана, чем на заре развития ЭВМ. Однако эти режимы не поддерживаются BorlandC++, потому что они появились несколько позже соответствующих библиотек языка Си.

Таблица 1

Характеристики текстовых видеорежимов

Размеры экрана Количество цветов Константа Си
40×25 16 оттенков серого BW40
40×25 16 цветов C40
80×25 16 оттенков серого BW80
80×25 16 цветов C80
80×25 2 (монохромный) MONO
80×43 (EGA)80×50 (VGA) 16 цветов C4350

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

На каждое знакоместо в видеопамяти отводится два байта. В один из них записывается ASCII-код символа, который должен выводиться в соответствующем месте экрана. Другой байт называется байтом атрибутов текста и содержит информацию о цвете символа. Младшие 4 бита атрибутов определяют цвет текста, старшие – цвет фона. Коды цветов приведены в табл. 2. Знакоместа записываются в видеопамяти последовательно слева направо, сверху вниз.

Таблица 2

Коды цветов текстового режима

Код Цвет Константа Си Код Цвет Константа Си
0 Черный BLACK 8 Черный DARKGRAY
1 Темно-синий BLUE 9 Светло-синий LIGHTBLUE
2 Темно-зеленый GREEN 10 Светло-зеленый LIGHTGREEN
3 Темно-голубой CYAN 11 Светло-голубой LIGHTCYAN
4 Темно-красный RED 12 Светло-красный LIGHTRED
5 Темно-розовый MAGENTA 13 Светло-розовый LIGHTMAGENTA
6 Коричневый BROWN 14 Желтый YELLOW
7 Светло-серый LIGHTGRAY 15 Белый WHITE

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

За формирование изображения на экране из ASCII-кодов и атрибутов текста отвечает видеоадаптер. Программисту не приходится затрачивать для этого практически никаких усилий. Преобразование ASCII-кода в растровый образ символа, выводимый на экран, осуществляется «на лету» в процессе развертки кадра. При этом используется шрифт, который либо «прошит» в ПЗУ видеоадаптера, либо заранее загружен из ОЗУ пользователем. Шрифты, используемые по умолчанию в системе MS-DOS, содержат во второй половине таблицы европейские символы. В связи с этим для вывода кириллицы в текстовом режиме требуется настройка системы на 866 кодовую страницу либо установка русификатора перед запуском программы. И в том, и в другом случае с диска подгружается русифицированный шрифт и устанавливается в качестве текущего шрифта для видеоадаптера.

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

Система координат на экране выглядит так же, как и в графическом режиме: ось X направлена вправо, ось Y – вниз. Левый верхний угол имеет координаты (1; 1), в отличие от графического режима (где он имеет нулевые координаты). Во многих случаях текстовые функции Си работают не непосредственно с экраном, а с некоторой его прямоугольной областью, называемой окном вывода. По умолчанию окно занимает весь экран, но его координаты могут быть изменены программистом. При выводе в окно содержимое экрана за пределами окна не изменяется, а перенос слишком длинных строк производится по границе окна, а не экрана.

4. Функции текстового режима

Для использования описанных ниже функций необходимо подключить заголовочный файл <conio.h>.

4.1 Общие параметры

void textmode(int newmode)

Устанавливает заданный текстовый видеорежим (см. табл. 1).

void window(int left, int top, int right, int bottom)

Устанавливает новое текстовое окно. Задание некорректных координат приводит к игнорированию обращения к функции window. Параметры left и top задают координаты экрана для верхнего левого угла окна, bottom и right определяют координаты экрана для нижнего правого угла окна.

По умолчанию окно занимает весь экран. Например, в режиме 80×25 по умолчанию координаты окна равны 1,1,80,25.

void gettextinfo(struct text_info *pinfo)

Заполняет структуру text_info, на которую указывает pinfo, видеоинформацией о текущем режиме. С помощью этой функции, в частности, можно узнать текущие координаты окна, установленный видеорежим, размеры экрана.

4.2 Управление курсором

void gotoxy(int x, int y)

Перемещает курсор в заданную позицию текстового окна. Левый верхний угол окна имеет координаты (1,1). Если координаты по какой-то причине указаны неверно, то вызов данной функции игнорируется. Примером такой ошибки может служить вызов gotoxy (40,30), когда размер окна равен 35×25.