WindowsXP, BorlandC++5.02 и <graphics.h>
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.94] |
|
|
WindowsXP, BorlandC++5.02 и <graphics.h>
|
Сообщ.
#1
,
|
|
|
|
Проблема такая.
Понадобилось решение задачи, результатом которой должны являться некие кривые. Вообще говоря, было бы достаточно функций line и putpixel (сам не программист, но когда-то подобные задачи решал). Поставил себе (на XP) BorlandC++5.02, начал писать программу, обьявил <graphics.h>, получил сообщение "graphics.h(20,52):Error directive: BGI graphics not supported under Windows". Был бы благодарен, если бы кто-нибудь обьяснил, как это преодолеть. Так же был бы благодарен за работающую ссылку на доступный простым смертным учебник по OpenGL (думаю, еще пригодится). Спасибо. |
|
Сообщ.
#2
,
|
|
|
|
Насколько я понял, ты пытаешься использовать BGI в программе, написанной под Win32.
А надо писать под ДОС. |
|
Сообщ.
#3
,
|
|
|
|
|
Сообщ.
#4
,
|
|
|
|
Цитата trainer @ 21.11.04, 12:08 Насколько я понял, ты пытаешься использовать BGI в программе, написанной под Win32. А надо писать под ДОС. А что же мне, разнесчастному, делать, если нужны простенькие рисовательные инструменты (образно говоря, синусоиду нужно изобразить, или там тепловую волну бегущую) под Win32? |
|
Сообщ.
#5
,
|
|
|
|
Под Win32 надо использовать WinAPI.
BGI - под ДОС. |
|
Сообщ.
#6
,
|
|
|
|
Цитата trainer, 21.11.04, 12:55 Под Win32 надо использовать WinAPI. Уточню: GDI |
|
Сообщ.
#7
,
|
|
|
|
Прошу прощения за тупость и настырность.
Но мне бы на конкретном примере. Например, я хочу провести линию из вехнего левого угла в нижний правый, а также увидеть отдельный пиксель с координатами (100,100). Вот так ![]() ![]() #include <graphics.h> void main() { line (0,0,640,480,6); putpixel (100,100,6); } ..., как мы выяснили, будет неправильно. А как правильно? Чего надоть подключить? |
|
Сообщ.
#8
,
|
|
|
|
Цитата Ламер, 21.11.04, 19:25 ..., как мы выяснили, будет неправильно. А как правильно? Чего надоть подключить? инициализируем: ![]() ![]() int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode,NULL); errorcode = graphresult(); if(errorcode != grOk){ printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } дальше рисуем что хотим, в конце программы освобождаем: ![]() ![]() closegraph(); |
|
Сообщ.
#9
,
|
|
|
|
Инициализация, эт да. За 5 лет все забыл
Задал дословно: ![]() ![]() #include <graphics.h> void main() { int gdriver=DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, NULL); errorcode = graphresult(); if(errorcode!=grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } line (0,0,640,480,6); closegraph(); } Все равно: GRAPHICS.H(20,52):Error directive: BGI graphics not supported under Windows Постинги Мяута и Трэйнера я понял так, что подключать надо вообще другую библиотеку. M Просьба использовать тег кода для оформления [ code][ /code] (без пробелов) Leprecon |
|
Сообщ.
#10
,
|
|
|
|
Цитата Ламер, 21.11.04, 21:02 Постинги Мяута и Трэйнера я понял так, что подключать надо вообще другую библиотеку. Под Винды ДОСовскую графику заюзать никак не получится. Тебе же дали ссылку на ОпенГЛ. По мне - так лучше взять ДОСовский компил (ту же борландовскую трешку) и там написать |
|
Сообщ.
#11
,
|
|
|
|
Под Win32 ты не сможешь рисовать в консоли.(по крайней мере я не знаю способов)
Рисовать можно в окно. Для этого надо сначала создать окно(CreateWindow() и иже с ней), а для рисования исподьзовать функции GDI. Подключаемый хедер один - windows.h Пишешь у себя в проекте: ![]() ![]() #include <windows.h> Библиотеки обычно подключаются автоматически(Visual Studio'ей). Если нет, то надо руками подключить библиотеки Gdi32.lib, User32.lib. |
|
Сообщ.
#12
,
|
|
|
|
Цитата Ламер, 21.11.04, 15:25 Кто чего выяснил - я не знаю. как мы выяснили, будет неправильно. ![]() Я знаю, что в настройках проекта надо выбрать в качестве целевой платформы ДОС. И не забыть вызвать initgraph перед использованием других функций для работы с графикой. ![]() ![]() #include <conio.h> #include <graphics.h> int main(int,char**) { int max_x, max_y; int driver = DETECT; int mode = 0; initgraph(&driver,&mode,""); max_x = getmaxx(); max_y = getmaxy(); line(0,0,max_x,max_y,GREEN); putpixel(100,100,RED); while( !kbhit() ); closegraph(); return 0; } |
|
Сообщ.
#13
,
|
|
|
|
Создай новый проект, там выбири Executable (.EXE), DOS (Standart), в Memory Model - Large, установи голочку BGI. Можно еще написать исходник на C, и за тем скомпилить:
![]() ![]() bcc my.c +graphics.lib |
|
Сообщ.
#14
,
|
|
|
|
Последний вопрос, самый тупой.
Сделал, как Мяут сказал, сообщений об ошибке не последовало, но монитор показал черный экран и даже выключаться (при нажатии на кнопку on/off!) отказался. Полез в настройки, а он, оказывается, меньше, чем 800*600 не поддерживает. Есть преламерское мнение, что по этой причине хрен мне, а не досовскую графику. Я прав? |
|
Сообщ.
#15
,
|
|
|
|
Цитата Ламер, 21.11.04, 18:51 Полез в настройки, а он, оказывается, меньше, чем 800*600 не поддерживает. Не поддерживает XP. А BGI-дрова поддерживают. В случае чего, видюха запускает эмуляцию |
|
Сообщ.
#16
,
|
|
|
|
Цитата Ламер, 21.11.04, 18:51 Врядли. У меня, например, вполне нормально запускается HIEW.Я прав? Запускаешь в полноэкранном или оконном режиме? |
|
Сообщ.
#17
,
|
|
|
|
В полноэкранном запускаю.
|
|
Сообщ.
#18
,
|
|
|
|
Забавно.
В оконном она пишет BGI Error: Graphics not initialized (use 'initgraph'), а в полноэкранном просто гаснет экран, как будто сигнал прекращается. При создании проекта выбираю Application (exe) {Exetuble в списке нет}, DOS (стандарт), Large, флажок BGI. Текст дословно Трэйнера. |
|
Сообщ.
#19
,
|
|
|
|
Приведенный мной код должен работать, если драйвер BGI находится в той же папке, что и сама программа. Иначе - надо указать путь к драйверу BGI третьим параметром функции initgraph
|
|
Сообщ.
#20
,
|
|
|
|
Человеку надо под Win32 писать, а вы ДОСовскую программу его заставляете запускать под XP. В общем ставить нужно Visual Studio или C++ Builder. В них создать окно new TForm(в билдере) или new CWnd (в VS). А там уже рисовать надо. И не нужно никаких OpenGL (человек линию хочет провести).
Советую посмотреть хелп по соответствующей системе. |
|
Сообщ.
#21
,
|
|
|
|
Anubis The God, ты вообще читал, что человек написал?
Цитата Ламер, 21.11.04, 11:49 Вообще говоря, было бы достаточно функций line и putpixel Цитата Ламер, 21.11.04, 11:49 Где там упоминание, чтоПоставил себе (на XP) BorlandC++5.02 Цитата Anubis The God, 22.11.04, 09:47 ? Человеку надо под Win32 писать |
|
Сообщ.
#22
,
|
|
|
|
Цитата Anubis The God, 22.11.04, 09:47 Человеку надо под Win32 писать, а вы ДОСовскую программу его заставляете запускать под XP У меня же все работает И в той же комбинации. Простог неправильно собран проект, вот и все |
|
Сообщ.
#23
,
|
|
|
|
Цитата trainer, 22.11.04, 10:41 Anubis The God, ты вообще читал, что человек написал? Цитата Ламер, 21.11.04, 12:49 А что же мне, разнесчастному, делать, если нужны простенькие рисовательные инструменты (образно говоря, синусоиду нужно изобразить, или там тепловую волну бегущую) под Win32? Сообщение No 4. trainer, ты бы сам читал иногда, что пишут. Ему нужен инструмент для рисования именно под Win32! Цитата Мяут, 22.11.04, 15:39 У меня же все работает И в той же комбинации. Простог неправильно собран проект, вот и все Конечно же ДОСовские приложения работают под ХР (не все), но писать новые программы под XP лучше основываясь на целевой платформе Windows. |