Турбо С: руководство пользователя. Часть 2

Турбо С: руководство пользователя. Часть 2 - Стр. 6

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 2
Стр. 2
Стр. 3
Стр. 4
Стр. 5
Стр. 6
Стр. 7
Стр. 8
Стр. 9
Стр. 10
Стр. 11
Стр. 12
Стр. 13
Стр. 14
Стр. 15
Стр. 16
Стр. 17
Стр. 18
Стр. 19
Стр. 20
Стр. 21
Стр. 22
Стр. 23
Стр. 24
Стр. 25
Стр. 26
Стр. 27
Стр. 28
Стр. 29
Стр. 30
Стр. 31
Стр. 32
Стр. 33
Стр. 34
Стр. 35
Стр. 36
Стр. 37
Стр. 38
Стр. 39
Стр. 40
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 56
Все страницы
          # Видеографический адаптер (VGA)
          # Графический адаптер Hercules
          # 400-строчный графический адаптер фирмы AT&T
          # Графический адаптер 3270 PC
          # Графический адаптер IBM 8514

                         - 43,44 -


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

          Загрузив графический драйвер, вы можете получить его имя при
     помощи  функции  getdrivename,  а число поддерживаемых им режимов
     при помощи функции getmaxmode. Функция getgraphmode сообщит вам о
     текущем графическом режиме.  Узнав номер режима,  вы можете полу-
     чить его название при помощи getmodename.  Вы можете  переключать
     графические режимы функцией setgraphmode,  а также вернуть видео-
     режим в изначальное состояние (то,  которое было до инициализации
     графики) функцией restorecrtmode.  Эта функция возвращает экран в
     текстовый режим,  но графическую систему не выключает  (шрифты  и

     драйверы остаются в памяти).

          graphdefaults устанавливает  все графические параметры (раз-
     мер графического окна,  цвета рисования и закрашивания, шаблоны и
     т.д.) в их значения по умолчанию.

          Функции installuserdriver и installuserfont позволяют допол-
     нять BGI дополнительными драйверами и шрифтами.

          И, наконец, когда вы прекращаете использовать графику, вызо-
     вите  closegraph  для выключения графической системы.  closegraph
     выгрузит из памяти драйвер и восстановит первоначальный  видеоре-
     жим (при помощи restorecrtmode).


          Более подробное обсуждение.
          ---------------------------

          Предыдущее рассмотрение   заключало  только  обзор  действия
     initgraph.  В следующих параграфах мы более подробно опишем пове-
     дение initgraph, _graphgetmem и _graphfreemem.


                         - 45,46 -

          Обычно функция  initgraph загружает графический драйвер пос-
     редством выделения памяти для этого драйвера с  последующей  заг-
     рузкой с диска соответствующего файла .BGI.  В качестве альтерна-
     тивы этой схеме динамической загрузки вы можете скомпоновать файл
     графического  драйвера  (или  несколько файлов) непосредственно с
     файлом вашей программы.  Для этого, во-первых, вы должны преобра-
     зовать файл .BGI в файл .OBJ (с помощью утилититы BGIOBJ),  а за-
     тем включить в текст вашей программы вызов registerbgidriver (пе-
     ред   вызовом   initgraph)  для  регистрации  этого  графического
     драйвера.  При компоновке программы вы должны будете скомпоновать
     файлы .OBJ для всех зарегистрированных драйверов.

          После определения (при помощи detectgraph) того, какой драй-
     вер должен использоваться,  initgraph проверяет,  зарегистрирован
     ли этот драйвер.  Если да,  то initgraph использует зарегистриро-
     ванный драйвер непосредственно  из  памяти.  В  противном  случае
     initgraph выделяет память для драйвера и загружает с диска файл .
     BGI.

          Замечание: использование registerbgidriver  является  углуб-
     ленным методом программирования и,  поэтому, не рекомендуется для
     начинающих программистов.  Более детально эта функция  описана  в

     Приложении D Справочного Руководства.

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

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

          Замечание. Если   вы    определили    собственную    функцию
     _graphgetmem  или  _graphfreemem,  то  может  появиться сообщение
     "Warning: duplicate symbols" вследствие того, что функции с таки-

     ми  же  именами находятся в графической библиотеке.  Не обращайте
     внимания на это сообщение.



                         - 47,48 -

          Рисование и закрашивание
          ------------------------

          Ниже приведено  краткое  описание  рисующих  и закрашивающих
     функций:

     =================================================================

          Рисование:
       arc             вычерчивает круговую дугу
       circle          вычерчивает окружность
       drawpoly        вычерчивает многоугольник
       ellipse         вычерчивает эллиптическую дугу
       getarccoords    возвращает координаты последнего обращения к
                       arc или ellipse
       getaspectratio  возвращает коэффициент сжатия текущего графиче-
                       ского режима
       getlinesettings возвращает текущие стиль, шаблон и  толщину ли-
                       нии
       line            вычерчивает линию от (x0, y0) до (x1, y1)
       linerel         вычерчивает линию  от  текущей позиции (ТП)  до
                       точки на заданном от нее расстоянии

       lineto          вычерчивает линию от ТП до (x,y)
       moveto          устанавливает ТП в (x,y)
       moverel         перемещает ТП на заданное расстояние
       rectangle       вычерчивает прямоугольник
       setaspectratio  изменяет коэффициент сжатия
       setlinestyle    устанавливает текущую толщину и стиль линии

          Закрашивание:
       bar             вычерчивает и закрашивает прямоугольник
       bar3d           вычерчивает и закрашивает параллелепипед
       fillellipse     вычерчивает и закрашивает эллипс
       fillpoly        вычерчивает и закрашивает многоугольник
       floodfill       "лавинно" заполняет ограниченную область
       getfillpattern  возвращает описанный пользователем шаблон
                       закрашивания
       getfillsettings возвращает информацию о текущем шаблоне
                       и цвете закрашивания
       pieslice        вычерчивает и закрашивает круговой сектор
       sector          вычерчивает и закрашивает эллиптический сектор
       setfillpattern  устанавливает заданный пользователем шаблон
                       закрашивания
       setfillstyle    устанавливает шаблон и цвет

                         - 49,50 -


     =================================================================

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

          Вы вычерчиваете линии и незакрашенные фигуры с помощью функ-
     ций arc,  circle,  drawpoly,  ellipse,  line,  linerel,  lineto и
     rectangle.  Вы можете закрашивать эти фигуры с помощью floodfill,
     или осуществлять вычерчивание и закрашивание за один  шаг  с  по-
     мощью bar, bar3d, fillellipse, fillpoly, pieslice или sector.

          Используя setlinestyle,  вы можете задать, будет ли вычерчи-
     ваемая линия (включая линии,  ограничивающие фигуры) толстой  или
     тонкой, а также будет ли эта линия сплошной, точечной или еще ка-

     кой  в  соответствии  с  заданным  вами   шаблоном.   С   помощью
     setfillstyle вы можете выбрать предопределенный шаблон закрашива-
     ния,  а с помощью setfillpattern - описать свой собственный  шаб-
     лон. С помощью moveto вы можете передвигать текущую позицию в за-
     данную точку, а с помощью moverel - на заданное расстояние.

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

          С помощью getaspectratio вы можете получить коээфициент сжа-
     тия (масштабирующий коэффициент,  используемый графической систе-
     мой  для  получения  правильных   окружностей),   а   с   помощью
     getarccoords - координаты последней нарисованной дуги или элипса.
     Если   окружности    рисуются    с    искажениями,    используйте
     setaspectratio для корректировки изображения.





                         - 51,52 -