Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Здравствуйте, def0e0, Вы писали:
D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
надо выводить текст в графическом режиме
была библиотека zinc с win-подобными окошками, но дальше просмотра демо я с ней дела не имел, написал свое
Здравствуйте, def0e0, Вы писали:
D>Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Если неохота связываться со всем этим, то можно попробовать NXLIB или OpenGUI.
Есть еще замечание насчет компилятора. Скорее всего, у тебя какой-нибудь старый борладовский — и скорее всего он не подойдет для всего вышеуказанного, под DOS лучше использовать DJGPP — порт gcc под DOS.
Здравствуйте, def0e0, Вы писали:
D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Я однажды сделал что-то подобное. Это было в прошлом веке на на позапрошлой работе, поэтому исходников нет.
Но идея такая. Память под текстовый режим(CGA — C80) и под графику в DOS разная. А в Turbo Vision кажется можно
и самому назначить буфер под текстовый режим.
1) переходишь в графический режим
2) назначаешь какой-нибудь символ (или несколько ) прозрачным
3) рисуешь графику
4) строишь текстовый интерфейс как обычно
5) заполняешь какое-нибудь текстовое окно прозрачным символом
А теперь фокус
в свободное время в цикле делаешь следующее
Анализируешь буфер текстового режима.
Если символ прозрачный — не делать ничего
Если символ непрозрачный —
a) определить цвет фона и нарисовать прямоугольник нужного цвета
b) определить цвет символа и нарисовать символ
отдельно нарисовать курсор
Была ещё жуткая оптимизация работы с видеопамятью в 16-цветном режиме,
но сейчас это не должно быть критично
Текстовый буфер устроен так
{ char Character;
{int ForeColor :4;
int BackColor :4;
} Attr;
} TextBufer [25/*или сколько там*/][80];
За давностью лет могу перепутать порядок байт (Character и Attr)
Здравствуйте, def0e0, Вы писали:
D> Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями?
Вообще способ есть, но он Вам вряд ли подойдет. Этот способ позволяет выводить в текстовом режиме двоичные изображения размером 128x128 с раскраской отдельного знакоместа 8x16. Реализуется путем перепрограммирования верхней половины таблицы знакогенератора. Изображения символов с кодами больше 127 при этом естественно недоступны. Этот способ используется для вывода логотипа при старте системы.
D> Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Я когда-то давно переписывал библиотеку Turbo Professional для работы с фреймбуфером. Там ничего сложного, только переписать процедуры вывода символов на экран, текстового и мышиного курсора.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
VC>ps интересно, чем мотивировано использование дос?
Ну, во-первых, очень настоятельно рекомендует шеф. А, во-вторых, железо, на котором все это будет работать, не потянет Windows (разве что 95 или 3.11). Я бы конечно все это на линукс посадил, но опять же шеф пока не одобряет...
Здравствуйте, def0e0, Вы писали:
D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Мои студенты как-то в качестве курсовой сделали вращающийся кубик в текстовом режиме. Идея лежит в перезагрузке шрифтов в знакогенератор.
Работало все замечательно. Но требует тщательного программирования.
Книжки Фроловых про видеосистемы из библиотеки системного программирования должно быть достаточно. Еще на эту же тему были книжки по программированию игр — там об оптимизации вывода в режиме VGA на аппаратном уровне. К сожалению авторов не помню — более 10 лет назад дело было...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Сергей, Вы писали:
С>Можно попробовать http://www.japheth.de/HX.html — DOS-extender, с кое-какой эмуляцией Win32API. В нем можно использовать порт SDL (http://www.libsdl.org) под Win32, а для SDL существуют библиотеки для GUI, например http://libuta.sourceforge.net/.
С>Если неохота связываться со всем этим, то можно попробовать NXLIB или OpenGUI.
С>Есть еще замечание насчет компилятора. Скорее всего, у тебя какой-нибудь старый борладовский — и скорее всего он не подойдет для всего вышеуказанного, под DOS лучше использовать DJGPP — порт gcc под DOS.
Здравствуйте, def0e0, Вы писали:
D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Чисто теоретически, можно сделать текстовый режим поверх графического. (Даже старый добрый CGA это поддерживает).
Но беда в том, что TurboVision работает напрямую с видеобуфером, а не с терминалом, поэтому в лоб, просто переключив видеорежим, не получится.
По мотивам TV были сделаны разные библиотеки, например, Graphics Vision (Гугль в помощь).
Здравствуйте, def0e0, Вы писали:
D>Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Borland-овские компиляторы для DOS (C++ и Pascal) предоставляют графическую библиотеку. В C++ надо #include-ить заголовочный файл graphics.h. Ещё там зачем-то есть файл egavga.bgi (BGI = Borland graphics instruments).
Но эта библиотека не имеет отношения к Turbo Vision. Рисовать widget-ы (элементы пользовательского интерфейса) и мышиный курсор придётся самому. Получать мышиный ввод – тоже (если я правильно помню, драйвер мыши доступен через программное прерывание 33h).
LaptevVV уже правильно посоветовал книги серии «Библиотека системного программиста», авторы: Александр Фролов, Григорий Фролов. Если хотите, могу выложить соответствующие тома в электронном виде.
Здравствуйте, Пётр Седов, Вы писали:
ПС>Но эта библиотека не имеет отношения к Turbo Vision. Рисовать widget-ы (элементы пользовательского интерфейса) и мышиный курсор придётся самому. Получать мышиный ввод – тоже (если я правильно помню, драйвер мыши доступен через программное прерывание 33h).
Драйвер мыши сам рисует курсор в VGA-режимах.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, Пётр Седов, Вы писали:
ПС>LaptevVV уже правильно посоветовал книги серии «Библиотека системного программиста», авторы: Александр Фролов, Григорий Фролов. Если хотите, могу выложить соответствующие тома в электронном виде.
Буду очень благодарен, если выложите книги! Мне очень пригодятся.
Это моя текущая работа (т.е. не теоретический, а практический совет).
Компилятор DJGPP, графика рисуется посредством allegro.
GUI можно рисовать непосредственно через allegro, но не очень удобно.
Есть довольно удобная либа — MASking — основные виджеты GUI поверх allegro.
Кстати, если потом будет переход под линух (а в случае серьёзной программы будете вынуждены) то всё это "безобразие" вроде как компилится под никсы (сам пока ещё не пробовал).
Но это в случае, если нет возможности обойтись TurboVision — ибо по простоте и быстродействию с текстовым режимом соревноваться не просто.
Здравствуйте, def0e0, Вы писали:
D>Кто-нибудь видел Norton PartitionMagic в досе? Как они это сделали кто-нибудь знает?
Сами рисуют все в графическом режиме.
> D>Кто-нибудь видел Norton PartitionMagic в досе? Как они это сделали кто-нибудь знает? > Сами рисуют все в графическом режиме.
Я слышал, там используется библиотека MGL разработки http://www.scitechsoft.com/, для которой, кстати, имеется порт wxWidgets — wxMGL. Вот только сама scitech software, похоже, приказала долго жить...
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Аноним, Вы писали: А>GUI можно рисовать непосредственно через allegro, но не очень удобно.
В смысле? Allegro сам умеет рисовать GUI.
allegro\include\allegro\gui.h
allegro\examples\exgui.c
Здравствуйте, def0e0, Вы писали:
D>Буду очень благодарен, если выложите книги! Мне очень пригодятся.
Файл BSP.zip, лежит здесь: http://slil.ru/25366121
Размер: 1.66 мб
Файл будет удалён через 1 месяц после последнего скачивания.
В архиве:
Файл v02\index.html:
Том 2 «Аппаратное обеспечение IBM PC»
Там в главе 3 описан интерфейс драйвера мыши. Есть примеры кода (dbsp2.zip).
Файл v03\index.html:
Том 3 «Программирование видеоадаптеров CGA, EGA и VGA»
Есть примеры кода (dbsp3.zip).
Файл v21c\index.html:
Том 21 «Программирование видеоадаптеров»
К сожалению, содержимого книги нет, только оглавление. Правда, есть примеры кода (dbsp21.zip).
Файл v33c\index.html:
Том 33 «Аппаратное обеспечение персонального компьютера»
Тоже содержимого нет, есть примеры кода (dbsp33.zip).
Но я Вам не советую тратить время на изучение низко-уровневых деталей видеокарты, это всё давно потеряло актуальность. Лучше использовать какую-нибудь высоко-уровневую графическую библиотеку, вроде Borland-овского graphics.h.
Здравствуйте, ДимДимыч, Вы писали: ДД>Драйвер мыши сам рисует курсор в VGA-режимах.
Да, точно. Том 2 «Аппаратное обеспечение IBM PC»:
Глава 3. Мышь
… 3.2. Драйверы мыши в MS-DOS
…
Драйвер мыши выполняет следующие функции:
* отслеживает перемещения курсора и нажатия на клавиши мыши;
* рисует на экране курсор, повторяющий движения мыши в графическом или текстовом режимах;
* предоставляет программам интерфейс для работы с мышью, основанный на вызове прерывания INT 33h.