Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Стивенс Ал. Весь текст 495.21 Kb

Техника программирования на турбо-С

Предыдущая страница Следующая страница
1 ... 3 4 5 6 7 8 9  10 11 12 13 14 15 16 ... 43
int v;
for (v=0, vp = vdata; *vp; v +=2, vp++)
     poke ( VSEG, v, 0x700| *vp);
}

        "Снег" и обратный ход луча развертки
-----------------------------------------------------------------

     Если вы   запустите   программу   vidpoke.exe  в  цикле  или
значительно увеличите длину выводимой строки,  то сможете увидеть
на   экране   так   называемый  "снег",  который  появляется  при
выполнении программы.  Вы будете наблюдать "снег" только в случае
использования контроллера CGA или его аналога.  Контроллеры ЕGA и
МА не дают подобного  эффекта.  Из  нижеследующих  объяснений  вы
узнаете,  почему  возникает  "снег"  и  как  его  можно устранить
программнми средствами.

     "Снег" возникает при  использовании  контроллера  CGA  из-за
особенностей  аппаратной  архитектуры  видеосистемы.  Поскольку и
микропроцессор, и видеоконтроллер обращаются к одной видеопамяти,
то  в  случае  одновременного обращения возникает необходимость в
координировании   доступа   к   памяти.  Работа  видеоконтроллера
синхронизирована по времени с работой схемы  развертки.  Во время
формирования элемента  изображения   на   экране  видеоконтроллер
должен  иметь  доступ  к  ячейке  памяти,  которая  содержит бит,
соответствующий этому элементу  изображения.   Видеопроцессор при
этом  не  может  ждать,  поскольку  он  жестко  синхронизирован с
устройством    формирования    растра.     Следовательно,    если
видеоконтроллер   и    микропроцессор     пытаются   одновременно
обратиться  к одной и той же  ячейке  памяти,  то видеоконтроллер
должен  иметь   при   этом   более  высокий приоритет.  В  хорошо
разработанной системе микропроцессор будет находиться в состоянии
ожидания,  при котором запросы микропроцессора  к  видеопамяти не
поступают.   В контроллерах МА и EGA использован этот  принцип, и
вы  можете  не  беспокоиться  о   конфликтных   ситуациях   между
микропроцессором и видеоконтроллером при  доступе  к видеопамяти.
Но в контроллере CGA в символьном режиме   этого  не выполняется,
поэтому вы должны сами предпринимать некоторые действия.

     В случае использования контроллера CGA, если микропроцессору
нужно обратиться к видеопамяти для чтения или записи,  то это ему
разрешается,  а видеоконтроллеру доступ на это время запрещается.
А поскольку работа видеоконтроллерMZШ Б
  
Эit$

                            Глава 6
                            -------

                  Библиотека оконных функций
-----------------------------------------------------------------

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

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

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


          Стековые окна
-----------------------------------------------------------------

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

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

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

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


              Слоеные окна
-----------------------------------------------------------------

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

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

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

     Рассмотрим рисунок 6.1.  Три окна расположены так, что часть
окна А видима, часть закрыта окном В и часть - окном С. В буферах
сохранения каждого окна  вы можете видеть   границы частей других
окон, которые закрыты.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦                                                               ¦
¦                                   .ЪДДДДДДДДДДД¬              ¦
¦                                .   ¦           ¦              ¦
¦                             .      ГДДДДДДДДДДДґ Буфер        ¦
¦                          .         ¦           ¦ сохранения В ¦
¦                       .            ¦           ¦              ¦
¦                    .               ¦           ¦              ¦
¦                 .                  АДДДДДДДДДДДЩ              ¦
¦             .                                  .              ¦
¦         .                                                     ¦
¦      .                                    .                   ¦
¦      ЪДДДДДДДДДД¬                                             ¦
¦ ЪДДДДґ B        ГДДДД¬               .                        ¦
¦ ¦ A  ¦          ¦    ¦           .                            ¦
¦ ¦    ¦     ЪДДДДБДДДДБДДД¬.   .                               ¦
¦ ¦    ¦     ¦ C           ¦.        .                          ¦
¦ ¦    АДДДДД¦             ¦               .                    ¦
¦ АДДДДДДДДДД¦             ¦                       .            ¦
¦            ¦             ¦                              .     ¦
¦            ¦             ¦        ЪДДДДДДВДДДДДДДДДДВДДД¬     ¦
¦            АДДДДДДДДДДДДДЩ        ¦      ¦          ¦   ¦     ¦
¦                 .                 ¦      ¦          ¦   ¦     ¦
¦                     .             ¦      ¦          ¦   ¦     ¦
¦                         .         ГДДДДДДЩ          ¦   ¦     ¦
¦                              .    ГДДДДДДДДДДДДДДДДДЩ   ¦     ¦
¦                                 . АДДДДДДДДДДДДДДДДДДДДДЩ     ¦
¦                                      Буфер сохранения С       ¦
¦                                                               ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

        Рисунок 6.1. Три слоеных перекрывающихся окна.


     Если вы запишите текстовую строку "now is the time"  в  окно
А, текст будет направлен в три различных места. Результат показан
на рисунке 6.2.  Так  как  часть  окна  А,  где  записано  "now",
является   видимой,   то  слово  записывается  непосредственно  в
видеопамять и может быть прочитано пользователем.  Слова "is the"
являются  частью  окна  А,  которая закрыта окном В,  поэтому эти
слова записываются  в  буфер  сохранения  окна  В.  Слово  "time"
оказывается  в  той  части  окна  А,  которая  покрыта  окном  С,
следовательно "time" записывается в буфер сохранения окна С.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
Предыдущая страница Следующая страница
1 ... 3 4 5 6 7 8 9  10 11 12 13 14 15 16 ... 43
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама