скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: C++: Стандартные библиотечные функции работы с графикой

struct fillsettingstype

{

  int pattern;  /* current fill pattern */

  int color;  /* current fill color */

}

font_names – Имена для BGI шрифтов( см. таблицу 2).

Таблица 2.

Название

Значение

Результат
DEFAULT_FONT 0 8x8 растровый шрифт
TRIPLEX_FONT 1 Штриховой тройной шрифт
SMALL_FONT 2 Штриховой маленький шрифт
SANS_SERIF_FONT 3 Штриховой "гротесковый” шрифт
GOTHIC_FONT 4 Штриховой готический шрифт

Используется функцией settextstyle().

graphics_drivers – Константа, определяющая BGI графические драйверы( см. таблицу 3).

Таблица 3.

Константа

Значение

DETECT 0 (авто определение)
CGA 1
Таблица 3. продолжение.
MCGA 2
EGA 3
EGA64 4
EGAMONO 5
IBM8514 6
HERCMONO 7
ATT400 8
VGA 9
PC3270 10

Используется функцией initgraph().

graphics_errors – Константа, соответствующая коду ошибки, возвращённому функцией graphresult()( см. таблицу 4).

Таблица 4.

Код ошибки

Константа graphics_errors Соответствующее сообщение об ошибке
0 grOk Нет ошибок
-1 grNoInitGraph (BGI) графика не установлена (использовать initgraph)
-2 grNotDetected Графические аппаратные средства не обнаружены
-3 grFileNotFound Файл драйвера не найден
-4 grInvalidDriver Недействительный файл драйвера
-5 grNoLoadMem Недостаточно памяти чтобы загрузить драйвер
-6 grNoScanMem Недостаточно памяти в просмотре заливки
-7 grNoFloodMem Недостаточно памяти для заливки
-8 grFontNotFound Файл шрифта не найден
-9 grNoFontMem Недостаточно памяти для загрузки шрифта
-10 grInvalidMode Недопустимый графический режим для выбранного драйвера
-11 grError Графическая ошибка
-12 grIOerror Графическая ошибка ввода/вывода
-13 grInvalidFont Недопустимый файл шрифта
-14 grInvalidFontNum Недопустимый номер шрифта
-15 grInvalidDeviceNum Недопустимый номер устройства
-18 grInvalidVersion Недопустимый номер версии

graphics_modes – Константы графических режимов для каждого BGI драйвера( см. таблицу 5).

Таблица 5.

Графический драйвер

Графические режимы

(graphics_modes)

Значение

Разрешение Палитра Страницы
CGA

CGAC0

CGAC1

CGAC2

CGAC3

CGAHI

0

1

2

3

4

320 x 200

320 x 200

320 x 200

320 x 200

640 x 200

C0

C1

C2

C3

2color

1

1

1

1

1

MCGA

MCGAC0

MCGAC0

MCGAC0

MCGAC0

MCGAMED

MCGAHI

0

1

2

3

4

5

320 x 200

320 x 200

320 x 200

320 x 200

640 x 200

640 x 480

C0

C1

C2

C3

2color

2color

1

1

1

1

1

1

EGA

EGALO

EGAHI

0

1

640 x 200

640 x 350

16color

16color

4

2

EGA64

EGA64LO

EGA64HI

0

1

640 x 200

640 x 350

16color

4color

1

1

EGA-MONO

EGAMONOHI

EGAMONOHI

0

1

640 x 350

640 x 350

2color

2color

1*

2**

HERC HERCMONOHI 0 720 x 348 2color 2
ATT400

ATT400C0

ATT400C1

ATT400C2

ATT400C3

ATT400MED

ATT400HI

0

1

2

3

4

5

320 x 200

320 x 200

320 x 200

320 x 200

640 x 200

640 x 400

C0

C1

C2

C3

2color

2color

1

1

1

1

1

1

VGA

VGALO

VGAMED

VGAHI

0

1

2

640 x 200

640 x 350

640 x 480

16color

16color

16color

2

2

1

PC3270 PC3270HI 0 720 x 350 2color 1
IBM8514

IBM8514HI

IBM8514LO

1

0

1024x 760

640 x 480

256color

256color

* – 64k на EGAMONO плате

** – 256k на EGAMONO плате

Данные параметры используются функциями detectgraph(), initgraph() и константами graphics_drivers.

HORIZ_DIR – Данный параметр устанавливает направление графического вывода шрифта (Имя параметра: HORIZ_DIR; Значение: 0; Направление: Слева на право). Данный параметр используется функциями gettextsettings(), settextstyle(), setusercharsize().

line_styles – Константы стилей линий для функций getlinesettings() и setlinestyle()( см. таблицу 6).

Таблица 6.

Константа

Значение

Результат

SOLID_LINE

0 Сплошная линия
DOTTED_LINE 1 Пунктир
CENTER_LINE 2 Центрированная линия
DASHED_LINE 3 Пунктирная линия
USERBIT_LINE 4 Определяется пользователем

line_widths – Константа ширины линий для функций getlinesettings() и setlinestyle()( см. таблицу 7).

Таблица 7.

Константа

Значение

Результат
NORM_WIDTH 1 Ширина в 1-н пиксель
THICK_WIDTH 3 Ширина в 3-и пикселя

linesettingstype – Используется функциями getlinesettings() и setlinestyle() для корректировки рисования линий.

struct linesettingstype

{

  int linestyle;

  int upattern;

  int thickness;

}

Таблица 8. Описание переменных структуры linesettingstype.

Элемент

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

upattern – 16-и разрядный образец, который применяется только если стиль линии определён как USERBIT_LINE. В этом случае, когда бит в образце слова единица, соответствующая точка в линии рисуется установленным цветом.

Например, сплошная линия соответствует upattern равному 0xFFFF(т.е. рисуются все пиксели), в то время как пунктирная линия может быть если upattern равно 0x3333 или 0x0F0F или 0x3F3F( см. таблицу 9).

Таблица 9.

16-и битный образец upattern

..xx..xx..xx..xx

....xxxx....xxxx

..xxxxxx..xxxxxx

xxxxxxxxxxxxxxxx

0x3333(штрих пунктир)

0x0F0F(длинный штрих пунктир)

0x3F3F(более длинный штрих пунктир)

0xFFFF(сплошная линия)

MAXCOLORS – Определяет максимальное число цветов для массива полей в palettetype. Используется функцией setallpalette().

palettetype – Содержит информацию о палитре для текущего графического драйвера при запросах с использованием функций getpalette(), setpalette(), setallpalette().

struct palettetype

{

  unsigned char size;

  signed char colors[MAXCOLORS+1];

}

Таблица 10. Описание элементов структуры palettetype.

Элемент

Описание
Size Даёт номер цветов в палитре для текущего графического драйвера в текущем режиме.
colors Массив байтов, содержащий необработанный номер цвета для каждого входа в палитру. Если элемент цветов 1, то палитра для данного входа не определена.

pointtype – Содержит координаты точки.

struct pointtype

{

  int x;

  int y;

}

putimage_ops – Параметры для функции putimage()( см. таблицу 11).

Таблица 11.

Константа
Значение
Описание
COPY_PUT 0 Битовый рисунок источника копируется на экран.
XOR_PUT 1 Исключающее ИЛИ. Отображает на экране исходное изображение.
OR_PUT 2 ИЛИ. Отображает на экране текущее изображение, не убирая предыдущего выведенного этого же изображения.
AND_PUT 3 Выводит на экран картинку поверх остальных объектов.
NOT_PUT 4 Копирует и вставляет инверсированный источник.

text_just – Параметр горизонтального и вертикального выравнивания для функции settextjustify().


Таблица 12. Значения параметра text_just.

Аргумент Константа Значение Результат
Horiz

LEFT_TEXT

CENTER_TEXT

RIGHT_TEXT

0

1

2

По левому краю

По центру

По правому краю

Vert

BOTTOM_TEXT

CENTER_TEXT

TOP_TEXT

0

1

2

По низу

По центру

По верху

text directions – Настройки текста. Содержит два параметра HORIZ_DIR и VERT_DIR.

textsettingstype – Используется для получения текущих настроек текста функцией gettextsettings().

struct textsettingstype

{

  int font;

  int direction;

  int charsize;

  int horiz;

  int vert;

}

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


Таблица 13.

Значение Размер дисплея 8x8 растровых шрифтов
1 Символы дисплея в 8x8 экранных блоков
2 Символы дисплея в 16x16 экранных блоков
... ...
10 Символы дисплея в 80x80 экранных блоков

Используется функциями gettextsettings(), settextstyle(), setusercharsize() и параметром textsettingstype.

VERT_DIR – Данный параметр устанавливает направление графического вывода шрифта (Имя параметра: VERT_DIR; Значение: 1; Направление: Снизу в верх, поворачивает выводимый текст на 90 градусов против часовой стрелки). Данный параметр используется функциями gettextsettings(), settextstyle(), setusercharsize().

viewporttype – Используется для получения настроек области вывода функцией getviewsettings().

struct viewporttype

{

  int left;

  int top;

  int right;

  int bottom;

  int clip;

}


2. Реализация пользовательской библиотеки “mouse.h”

В стандартной комплектации BorlandC2.0, BorlandC3.1 или любой версии компилятора C++ от любой другой корпорации, будь то MicroSoft, AT&T и т.д. нет ни одного модуля работы с мышью как-то в обычном или графическом режиме. Я имею в виду приложения под ОС MS-DOS. Конечно, написание такого модуля сводится не только к знаниям языка C++, но и так называемого языка низкоуровневого программирования Assembler’а.

Итак, приступим. Для начала мы должны определить основные функции, типы и константы.

Таблица 1. Константы.

Константа

Значение Описание
MB_NONE 0 Кнопки мыши не нажаты
MB_LEFT 1 Нажата левая кнопка мыши
MB_RIGHT 2 Нажата правая кнопка мыши
MB_LAR 3 Нажаты обе кнопки мыши
MB_MIDDLE 4 Нажата средняя кнопка мыши

Уточнение: константа MB_MIDDLE работает только с системными мышами и мышами от компании Logitech.

Типы, которые мы будем использовать в нашем модуле:

struct tPoint

{

  int x;

  int y;

};

struct tMouseState

{

  tPoint loc;

  int but;

};

Структура tPoint определяет координаты курсора.

Структура tMouseState определяет позицию курсора и состояние кнопок мыши, т.е. нажата ли какая либо кнопка на мышке и если да то какая.

Теперь опишем основные функции, которые используются у нас в модуле.

Функция ResetMouse() “убивает” мышь.

Функция ShowMouse() отображает курсор мыши на мониторе.

Функция HideMouse() скрывает курсор мыши.

Функция GetMouseState() типа tMouseState возвращает параметры мыши.

Функция MoveMouseCursor( int x, int y) перемещает курсор на заданную позицию.

Функция SetMouseVert( int max, int min) устанавливает вертикальные пределы для мыши. Например, если мышь до этой функции двигалась по всему монитору, т.е. от позиции (0, 0) до (640, 480), то после этой функции она будет двигаться только в установленном пространстве, т.е. от позиции (0, min) до (640, max).

Функция SetMouseHorz( int max, int min) устанавливает горизонтальные пределы для мыши. Данная функция полностью аналогична предыдущей. Мышь будет двигаться в пределах от (min, 0) до (max, 480).

Данные функции работают как в графическом, так и в обычном режимах. Если поместить этот модуль в папку где находятся основные модули с расширением *.h, то его можно подключать как “#include <mouse.h>”, иначе его подключение будет выглядеть как “#include “<путь>mouse.h””.

Думаю что этих функция вполне достаточно для работы с мышью. Листинг модуля представлен в приложении 1.


Заключение

В данной курсовой работе мной был рассмотрен стандартный модуль для работы с графикой на языке C++ “graphics.h”. А также разработан собственный модуль для работы с мышкой в графическом и обычном режимах. Данный модуль является интеллектуальной собственностью. Его дальнейшее изменение без согласия разработчика невозможно. Хотя дополнение модуля другими функциями и классами без изменения исходного кода функций и типов возможно и приветствуется разработчиком. Программный код модуля может свободно распространятся и бесплатен.

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


Приложение 1

Листинг модуля “mouse.h”

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <iostream.h>

#include <graphics.h>

const

  MB_NONE  = 0,

  MB_LEFT  = 1,

  MB_RIGHT = 2,

  MB_LAR   = 3,

  MB_MIDDLE= 4;

struct tPoint{

  int x;

  int y;

};

struct tMouseState{

  tPoint loc;

  int but;

};

extern "C" void ResetMouse();

extern "C" void ShowMouse();

extern "C" void HideMouse();

extern "C" struct tMouseState GetMouseState( void);

extern "C" void MoveMouseCursor( int x, int y);

extern "C" void SetMouseVert( int max, int min);

extern "C" void SetMouseHorz( int max, int min);

void ResetMouse()

{

  asm{

    xor ax, ax

    int 33h

  }

}

void ShowMouse()

{

  asm{

    mov ax, 1

    int 33h

  }

}

void HideMouse()

{

  asm{

    mov ax, 2

    int 33h

  }

}

struct tMouseState GetMouseState( void)

{

  struct REGPACK reg;

  struct tMouseState state;

  reg.r_ax=3;

  intr(0x33, &reg);

  state.loc.x=reg.r_cx;

  state.loc.y=reg.r_dx;

  state.but=reg.r_bx;

  return(state);

}

void MoveMouseCursor( int x, int y)

{

  asm{

    mov ax, 4

    mov cx, x

    mov dx, y

    int 33h

  }

}

void SetMouseVert( int max, int min)

{

  asm{

    mov ax, 8

    mov cx, min

    mov dx, max

    int 33h

  }

}

void SetMouseHorz( int max, int min)

{

  asm{

    mov ax, 7

    mov cx, min

    mov dx, max

    int 33h

  }

}


Список используемой литературы

1. Галерея «ПЕТРОПОЛЬ». Неформальное введение в C++ и TURBO VISION. 1992г.

2. М.И. Болски. Язык программирования Си. 1988г.

3. Юров В.И. Assembler. Учебник для вузов. 2-е издание. СПб.: Питер, 2004г.


Страницы: 1, 2


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.