Реферат по предмету "Информатика, программирование"


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

Волжский Университет им. В.Н. Татищева
ФакультетИнформатики и Телекоммуникаций
Курсоваяработа
Дисциплина:Системное программное обеспечение
Тема:
«C++: Стандартные библиотечные функцииработы с графикой»
Тольятти 200г.

Содержание Введение1. Анализграфического модуля “graphics.h”1.1 Анализфункции модуля1.2 Анализконстант, типов и глобальных переменных модуля2. Реализацияпользовательской библиотеки “mouse.h”ЗаключениеПриложение 1Списокиспользуемой литературы
Введение
Тема данной курсовойработы стандартные библиотечные функции работы с графикой в C++. В данном работе я постараюсьраскрыть основные моменты работы функций стандартного модуля C++, который можно подключить к любомупроекту написанном на языке Си, с помощью заголовочного файла graphics.h. Конечно, кроме данного модуля в современных средахразработки программных приложений на данном языке есть и такие не менееинтересные модули как glu32.lib и glaux.lib,подключаемые к проектам с помощью заголовочных файлов gl.h, glu.h, glaux.h. Они позволяют программисту показатьвсю красоту приложения, а также могут использоваться для спецэффектов, ноданные модули предназначены для работы с библиотекой opengl32.dll.Использование данной библиотеки, по сути дела, является работа с “компьютернойграфикой”, но под графические оболочки таких операционных систем как Windows 9x/2k/XP, Linux Mandrake/Red Hat/Slackware и тому подобных. Эта тема куда более обширная и интересная, но, как мызнаем, модуль graphics.h предназначен, в основном, для работы под операционнуюсистему MS-DOS, в которой просто невозможно использование самого opengl’а. А по этому поводу, я считаюнужным, перейти непосредственно к основному разделу данной работы. Т.е.приступить к рассмотрению стандартных функций.
1.Анализ графического модуля “graphics.h”
Как было уже сказано,данный модуль используется для работы с графикой под ОС MS-DOS. Функции, используемые в нём, для работы с графикой,да и как и сама графика, довольно примитивны. Итак, начнём.
Для инициализации модулятребуется подключить, так называемый, заголовочный файл (#include ). В этом файле описаны все функции, которые требуютсядля написания программы работающей с “графикой”.1.1Анализ функции модуля
initgraph( &grdriver, &grmode, “path”); – функция инициализации графическогорежима, где &grdriver, &grmode, “path” – параметры загружаемого режима;
grdriver и grmode – переменные типа integer;
“path” – путь к загружаемому драйверу графического режима.
Функция закрытияграфического режима: closegraph(); – даннаяфункция без каких либо параметров и закрывает текущий графический режим.
Функция определенияграфического драйвера и видео режима: detectgraph( &grdriver, &grmode);
Функция, возвращающаяструктуру определения палитры: getdefaultpalette(); –возвращает указатель на заданную по умолчанию структуру палитры для текущегодрайвера инициализированного по initgraph.
getdrivername(); – функция возвращает имя текущего графическогодрайвера.
getgraphmode(); – функция возвращает текущий графический режим.
getmoderange( grdriver, &low, &high); – функция возвращает диапазонрежимов для данного графического драйвера, где grdriver, low, high –переменные типа integer.
graphdefaults(); – сбрасывает текущие настройки в настройки поумолчанию.
_graphgetmem(); – функция выделения памяти. Эту функцию вызываютподпрограммы в графической библиотеке, чтобы распределить память. Даннуюфункцию можно использовать независимо от графической библиотеки, вызвав её суказанием нужного объёма памяти в байтах.
_graphfreemem(); – функция освобождения памяти. Используется всочетании с _graphgetmem().
setgraphbufsize(); – функция изменяет внутренний размер графическогобуфера. Вызывается до initgraph().
graphresult(); – возвращает код ошибки для последней неудачновыполненной операции.
installuserdriver( int *name, int huge( *detect)); – функция устанавливает драйвер определённыйпрограммистом. *name – название нового драйвера, *detect – указатель на дополнительную функцию автоопределения, которая может сопровождать новый драйвер. Эта функция (автоопределения) не берёт ни каких параметров и возвращает целочисленное значение.
registerbgidriver( *grdriver) – Функция сообщает графической системе, что драйверустройства, на который указывает *grdriver былвключён во время “линковки”.
registerbgifont( *font) – Функция информирует графическую систему, что шрифт, на которыйуказывает *font был включен во время “линковки”.
restorecrtmode() – Функция восстанавливает режим, существовавший доактивизации графического режима функцией initgraph().
arc( int x, int y, int stangle, int endangle, int radius); – Функция рисует дугу, по заданным координатам x, y, начальным и конечным углом stangle, endangle и заданным радиусом radius.
bar( int left, int top, int right, int bottom); – Функция рисует прямоугольникначиная от левого верхнего угла с координатами left, top доправого нижнего угла с координатами right, bottom.
bar3d( int left, int top, int right, int bottom, int depth); – Функция рисует “трёхмерныйпрямоугольник” или, так сказать, подобие параллелепипеда, начиная от верхнеголевого угла, до правого нижнего угла и с указанием глубины depth.
circle( int x, int y, int radius); – Функция рисует окружность с центром в точке с координатами ( x, y) и радиусом radius.
cleardevice(); – Функция очищает экран в графическом режиме ивозвращает текущую позицию указателя в точку с координатами ( 0, 0).
clearviewport(); – Функция стирает область просмотра и перемещаеттекущую позицию в точку с координатами ( 0, 0), относительно области просмотра.
drawpoly( int numpoints, int *polypoints); – Функциярисует полигон с количеством вершин numpoints и координатами вершин *polypoints. *polypoints является одномерным массивом.
ellipse( int x, int y, int stangle, int endangle, int xradius, int yradius); – Функция рисует эллипс скоординатами в точке ( x, y),начальным и конечным углами stangle,endangle, и радиусами xradius, yradius по осям x и y.
fillpoly( int numpoints, int *polypoints); – Функциярисует и закрашивает заданным цветом полигон.
fillelipse( int x, int y, int xradius, int yradius); – Функция рисует закрашенный эллипс.
floodfill( int x, int y, int border); – Область, ограниченная цветной границей закрашивается установленнымобразцом и цветом.
getarccoords( &arcinfo); – Функция возвращает координаты последней точки, на которую былпереведён указатель, где параметр &arcinfoобъявлен как struct arccoordstype arcinfo.
getaspectratio( &xasp, &yasp); – Получает значения коэффициентасжатия в &xasp, &yasp, где xasp, yasp являются переменными типа integer.
getbkcolor() – Возвращает значение типа integer текущего цвета фона.
getcolor() – Возвращает значение типа integer установленного на данный момент цвета.
getdefaultpalette() – ( дополнение) Возвращает структуру определения палитры впеременную объявленную как struct palettetype far *=(void *) 0;.
getfillpattern( char far *pattern); – Копирует определённыйпользователем заполненный образец в память.
getfillsetting( &fillinfo); – Получает информацию о текущих настройках стиля и цвета,где параметр &fillinfo объявлен как struct fillsettingstype fillinfo.
getimage( int left, int top, int right, int bottom, void far *bitmap); – Сохраняет картинку в специальноотведённой области памяти, где left, top, right, bottomкоординаты картинки, а *bitmap указатель на область памяти.
getlinesettings( &lineinfo); – Получает текущий тип линии, образец и толщину, гдепараметр &lineinfo объявлен как struct linesettingstype lineinfo.
getmaxcolor(); – Возвращает значение типа integer, которое соответствует номеру цвета.
getmaxmode(); – Возвращает значение типа integer, которое соответствует максимальному номеруграфического режима, для текущего драйвера.
getmaxx(); – Возвращает значение типа integer, которое соответствует максимальному количеству точекпо оси x для текущего графического режима.
getmaxy(); – Возвращает значение типа integer, которое соответствует максимальному количеству точекпо оси y для текущего графического режима.
getmodename( int mode_number); – Возвращает значение типа integer, которое соответствует указанномуграфическому режиму.
getpalette( &palette); – Получает информацию о текущей палитре, где параметр &palette объявлен как struct palettetype palette.
getpalettesize(); – Функция возвращает значение типа integer, соответствующее количеству цветовпалитры для текущего графического режима.
getpixel( int x, int y); – Функция возвращает номер цвета точки, находящейся покоординатам ( x, y).
gettextsettings( &textinfo); – Функция возвращает текущие настройки фонта для текущегографического режима, где параметр &textinfo определён как struct textsettingstype textinfo.
getviewsettings( &viewinfo); – Получает информацию о текущей области просмотра, гдепараметр &viewinfo определяется как struct viewporttype viewinfo.
getx(); – Функция типа integer возвращает текущую позицию указателя по оси x.
gety(); – Функция типа integer возвращает текущую позицию указателя по оси y.
grapherrormsg( int errorcode); – Возвращает код ошибки в виде переменной errorcode типа intger.
imagesize( int left, int top, int right, int bottom); – Определяет размер области памяти,необходимый для сохранения двоичного образа.
installuserfont( char far *name); – Функция типа intger возвращает номер идентификаторашрифта, который можно передать функции settextstyle для выбора данного шрифта. Параметр *name это путь к файлу шрифта. Одновременно данной функциейможно подключить до двадцати шрифтов.
line( int x0, int y0, int x1, int y1); – Функция рисует линию от точки скоординатами x0, y0 доточки с координатами x1, y1. Не обновляет текущую позицию.
linerel( int dx, int dy); – Функция рисует линию от текущей позиции до точки,находящейся на относительном расстоянии от текущей позиции, затем передвигаеттекущую позицию.
lineto( int x, int y); – Рисует линию от текущей позиции до точки с координатами ( x, y), затем переносит текущую позицию в ( x, y).
moverel( int dx, int dy); – Перемещает текущую позицию на относительное растояние.
moveto( int x, int y); – Перемещает текущую позицию в точку с координатами ( x, y).
outtext( char far *textstring); – Выводитстроку в графическом режиме. Строка должна заключатся в “”.
outtextxy( int x, int y, char far *textstring); – Выводитстроку в графическом режиме предварительно перейдя в точку с координатами ( x, y).
pieslice( intx, int y, int stangle, int endangle, int radius); – Рисует и закрашивает замкнутый секторкруга.
putimage( intleft, int top, void far *bitmap, int op); – Выводит битовый образ на экран.
putpixel( intx, int y, int color); – Рисует точку с координатами ( x, y) и цветом color.
rectangle( intleft, int top, int right, int bottom); – Рисует прямоугольник от точки с координатами (left, top) до точки с координатами ( right, bottom).
Registerfarbgidriver (void far *driver); – Данная функция используется длярегистрации удалённых графических драйверов.
Registerfarbgifont (void far *font); – Данная функция используется длярегистрации удалённых шрифтов.
sector (int x, int y, int stangle, int endangle, int xradius, int yradius); – Функция рисует сектор круга установленнымцветом, затем заполняет его используя образец и цвет, установленные функциями setfillstyle или setfillpattern.
setactivepage( int page); – Устанавливает активную страницу для графического вывода.
setallpalette( &palette); – Устанавливает полную палитру цветов для данного режима, где переменная&palette определена как struct palettetype palette.
setaspectratio( int xasp, int yasp); – Заменяет заданный по умолчаниюаспект сжатия графической системы.
setbkcolor( int color); – Устанавливает цвет фона по его номеру заданному переменной color.
setcolor( int color); – Устанавливает цвет по его номеру заданному переменной color.
setfillpattern( char far *upattern, int color); – Выбирает определённый пользователем образец заливки.
setfillstyle( int pattern, int color); – Функция устанавливает образец ицвет заливки.
setgraphmode( int mode); – Устанавливает систему в графический режим, определённый параметром mode. Сбрасывает все настройки вположение “по умолчанию”. Очищает экран.
setlinestyle( int linestyle, unsigned upattern, int thickness); – Устанавливает стиль рисуемых линий для функций рисования line, lineto, rectangle, drawpoly, etc.
setpalette( int colornum, int color); – Устанавливает палитру от цвета colornum до цвета color.
setrgbpalette( int colornum, int red, int green, int blue); – Данная функция может использоваться с IBM 8514 и VGAдрайверами.
settextjustify( int horiz, int vert); – Устанавливает выравнивание текстадля графического режима. По умолчанию стоит выравнивание по верхнему левомууглу.
settextstyle( int font, int direction, int charsize); – Устанавливает характеристики текста: стиль, положение(горизонтальное или вертикальное), размер шрифта.
setusercharsize( int multx, int divx, int multy, int divy); – Устанавливает определённыйпользователем “коэффициент сжатия” шрифта. По умолчанию ширина шрифтаопределена как multx:divx, высота как multy:divy.
setviewport( int left, int top, int right, int bottom, int clip); – Устанавливает новую область просмотра для графического вывода. Параметрclip определяет отсечены или нет всерисунки текущей области просмотра.
setvisualpage( int page); – Устанавливает страницу с номером page визуальной графической страницей.
setwritemode( int mode); – Устанавливает режим вывода объектов в графическом режиме. Параметр mode может принимать значения 0, которое соответствует режиму copy_putили 1, соответствующее режиму xor_put. Параметр copy_put использует ассемблерную команду MOV, рисуя поверх всех объектов новыйобъект. Параметр xor_put использует команду XOR (команду неэквивалентности), замещаяпредыдущий объект таким же новым. Используя дважды параметр xor_put, вы получите первоначальный результат.
textheight( char far *textstring); – Функциявозвращает высоту строки в количестве точек.
textwidth( char far *textstring); – Функциявозвращает ширину строки в количестве точек.1.2Анализ констант, типов и глобальных переменных модуля
arccoordstype – Используется функцией getarccoords для получения параметров текущейобласти просмотра.
structarccoordstype
{
  int x, y; /* center points of arc */
  int xstart,ystart;  /* start position */
  int xend,yend;  /* end position */
}
CGA_COLORS – Данная константа определяет цветовую схему,доступную для функция BGI,выполняющихся на CGA мониторах.Определена в модуле GRAPHICS.H. Используется функциями setallpalette, setbkcolor, setcolor, setpalette.
COLORS – Данная символьная константаустанавливает атрибут цвета символов на EGA и CGAмониторах. Определена в модуле CONIO.H. Используется функциями (функцииописаны в модуле CONIO.H) textattr, textbackground, textcolor.
EGA_COLORS – Данная константа определяет цветовую схему,доступную для функция BGI,выполняющихся на EGA мониторах.Определена в модуле GRAPHICS.H. Используется функциями setallpalette, setbkcolor, setcolor, setpalette.
fill_patterns – Образцы заливки применяемые функциямиgetfillsettings и setfillstyle( см. таблицу 1).
Таблица 1.Название Значение Результат заполнения EMPTY_FILL Цвет фона SOLID_FILL 1 Сплошная заливка LINE_FILL 2 Заливка типа “---” LTSLASH_FILL 3 Заливка типа “///” SLASH_FILL 4 “///” толстые линии BKSLASH_FILL 5 “\\\” толстые линии LTBKSLASH_FILL 6 Заливка типа “\\\” HATCH_FILL 7 Редкая штриховка XHATCH_FILL 8 Сильная перекрестная INTERLEAVE_FILL 9 “Чередование строк” WIDE_DOT_FILL 10 Заливка точками(широк) Таблица 1. продолжение. CLOSE_DOT_FILL 11 Заливка точками(узк) USER_FILL 12 Определ. пользователем
fillsettingstype – Используется функцией getfillsettings для получения текущих настроек заливки.
structfillsettingstype
{
  intpattern;  /* current fill pattern */
  int color; /* current fill color */
}
font_names – Имена для BGI шрифтов( см. таблицу 2).
Таблица 2.Название Значение Результат DEFAULT_FONT 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 Соответствующее сообщение об ошибке 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
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
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
1
640 x 200
640 x 350
16color
16color
4
2 EGA64
EGA64LO
EGA64HI
1
640 x 200
640 x 350
16color
4color
1
1 EGA-MONO
EGAMONOHI
EGAMONOHI
1
640 x 350
640 x 350
2color
2color
1*
2** HERC HERCMONOHI 720 x 348 2color 2 ATT400
ATT400C0
ATT400C1
ATT400C2
ATT400C3
ATT400MED
ATT400HI
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
1
2
640 x 200
640 x 350
640 x 480
16color
16color
16color
2
2
1 PC3270 PC3270HI 720 x 350 2color 1 IBM8514
IBM8514HI
IBM8514LO
1
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 Сплошная линия 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() длякорректировки рисования линий.
structlinesettingstype
{
  intlinestyle;
  intupattern;
  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().
structpalettetype
{
  unsignedchar size;
  signed charcolors[MAXCOLORS+1];
}
Таблица 10. Описание элементов структуры palettetype. Элемент Описание Size Даёт номер цветов в палитре для текущего графического драйвера в текущем режиме. colors Массив байтов, содержащий необработанный номер цвета для каждого входа в палитру. Если элемент цветов –1, то палитра для данного входа не определена.
pointtype – Содержит координаты точки.
struct pointtype
{
  int x;
  int y;
}
putimage_ops – Параметры для функции putimage()( см. таблицу 11).
Таблица 11. Константа Значение Описание COPY_PUT Битовый рисунок источника копируется на экран. 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
1
2
По левому краю
По центру
По правому краю Vert
BOTTOM_TEXT
CENTER_TEXT
TOP_TEXT
1
2
По низу
По центру
По верху
text directions – Настройки текста. Содержит двапараметра HORIZ_DIR и VERT_DIR.
textsettingstype – Используется для получения текущихнастроек текста функцией gettextsettings().
structtextsettingstype
{
  int font;
  intdirection;
  intcharsize;
  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().
structviewporttype
{
  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 Кнопки мыши не нажаты MB_LEFT 1 Нажата левая кнопка мыши MB_RIGHT 2 Нажата правая кнопка мыши MB_LAR 3 Нажаты обе кнопки мыши MB_MIDDLE 4 Нажата средняя кнопка мыши
Уточнение: константа MB_MIDDLE работает только с системными мышами и мышами откомпании Logitech.
Типы, которые мы будемиспользовать в нашем модуле:
struct tPoint
{
  int x;
  int y;
};
structtMouseState
{
  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 ”, иначе его подключение будетвыглядеть как “#include “mouse.h””.
Думаю что этих функциявполне достаточно для работы с мышью. Листинг модуля представлен в приложении1.
Заключение
В данной курсовой работемной был рассмотрен стандартный модуль для работы с графикой на языке C++ “graphics.h”. А также разработан собственный модуль для работы с мышкойв графическом и обычном режимах. Данный модуль является интеллектуальнойсобственностью. Его дальнейшее изменение без согласия разработчика невозможно.Хотя дополнение модуля другими функциями и классами без изменения исходногокода функций и типов возможно и приветствуется разработчиком. Программный кодмодуля может свободно распространятся и бесплатен.
Данная работа можетиспользоваться в учебных целях, а на основе кода модуля могут осуществлятьсяразличные разработки дополнительных функций для работы с мышью.
Приложение1
Листинг модуля “mouse.h”
#include
#include
#include
#include
#include
const
  MB_NONE  =0,
  MB_LEFT  =1,
  MB_RIGHT =2,
  MB_LAR   =3,
  MB_MIDDLE=4;
struct tPoint{
  int x;
  int y;
};
structtMouseState{
  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);
voidResetMouse()
{
  asm{
    xor ax, ax
    int 33h
  }
}
voidShowMouse()
{
  asm{
    mov ax, 1
    int 33h
  }
}
voidHideMouse()
{
  asm{
    mov ax, 2
    int 33h
  }
}
structtMouseState GetMouseState( void)
{
  structREGPACK reg;
  structtMouseState state;
  reg.r_ax=3;
  intr(0x33,®);
 state.loc.x=reg.r_cx;
 state.loc.y=reg.r_dx;
 state.but=reg.r_bx;
  return(state);
}
voidMoveMouseCursor( int x, int y)
{
  asm{
    mov ax, 4
    mov cx, x
    mov dx, y
    int 33h
  }
}
voidSetMouseVert( int max, int min)
{
  asm{
    mov ax, 8
    mov cx,min
    mov dx,max
    int 33h
  }
}
voidSetMouseHorz( 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г.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.