На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> WindowsXP, BorlandC++5.02 и <graphics.h>
    Проблема такая.
    Понадобилось решение задачи, результатом которой должны являться некие кривые.
    Вообще говоря, было бы достаточно функций line и putpixel (сам не программист, но когда-то подобные задачи решал).
    Поставил себе (на XP) BorlandC++5.02, начал писать программу, обьявил <graphics.h>, получил сообщение
    "graphics.h(20,52):Error directive: BGI graphics not supported under Windows".
    Был бы благодарен, если бы кто-нибудь обьяснил, как это преодолеть.
    Так же был бы благодарен за работающую ссылку на доступный простым смертным учебник по OpenGL (думаю, еще пригодится).
    Спасибо.
      Насколько я понял, ты пытаешься использовать BGI в программе, написанной под Win32.
      А надо писать под ДОС.
          Цитата trainer @ 21.11.04, 12:08
          Насколько я понял, ты пытаешься использовать BGI в программе, написанной под Win32.
          А надо писать под ДОС.

          А что же мне, разнесчастному, делать, если нужны простенькие рисовательные инструменты (образно говоря, синусоиду нужно изобразить, или там тепловую волну бегущую) под Win32? :unsure:
            Под Win32 надо использовать WinAPI.
            BGI - под ДОС.
              Цитата trainer, 21.11.04, 12:55
              Под Win32 надо использовать WinAPI.

              Уточню: GDI ;)
                Прошу прощения за тупость и настырность.
                Но мне бы на конкретном примере.
                Например, я хочу провести линию из вехнего левого угла в нижний правый, а также увидеть отдельный пиксель с координатами (100,100).

                Вот так

                ExpandedWrap disabled
                  #include <graphics.h>
                  void main()
                  {
                  line (0,0,640,480,6);
                  putpixel (100,100,6);
                  }


                ..., как мы выяснили, будет неправильно.
                А как правильно? Чего надоть подключить?
                Сообщение отредактировано: Leprecon -
                  Цитата Ламер, 21.11.04, 19:25
                  ..., как мы выяснили, будет неправильно.
                  А как правильно? Чего надоть подключить?


                  инициализируем:

                  ExpandedWrap disabled
                      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);
                      }


                  дальше рисуем что хотим, в конце программы освобождаем:
                  ExpandedWrap disabled
                    closegraph();
                  Сообщение отредактировано: Lavrik -
                    Инициализация, эт да. За 5 лет все забыл <_<
                    Задал дословно:

                    ExpandedWrap disabled
                      #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
                      Цитата Ламер, 21.11.04, 21:02
                      Постинги Мяута и Трэйнера я понял так, что подключать надо вообще другую библиотеку.


                      Под Винды ДОСовскую графику заюзать никак не получится. Тебе же дали ссылку на ОпенГЛ.
                      По мне - так лучше взять ДОСовский компил (ту же борландовскую трешку) и там написать ;)
                        Под Win32 ты не сможешь рисовать в консоли.(по крайней мере я не знаю способов)
                        Рисовать можно в окно. Для этого надо сначала создать окно(CreateWindow() и иже с ней), а для рисования исподьзовать функции GDI.
                        Подключаемый хедер один - windows.h
                        Пишешь у себя в проекте:
                        ExpandedWrap disabled
                          #include <windows.h>

                        Библиотеки обычно подключаются автоматически(Visual Studio'ей).
                        Если нет, то надо руками подключить библиотеки Gdi32.lib, User32.lib.
                          Цитата Ламер, 21.11.04, 15:25
                          как мы выяснили, будет неправильно.
                          Кто чего выяснил - я не знаю. :)
                          Я знаю, что в настройках проекта надо выбрать в качестве целевой платформы ДОС.
                          И не забыть вызвать initgraph перед использованием других функций для работы с графикой.
                          ExpandedWrap disabled
                            #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;
                            }
                            Создай новый проект, там выбири Executable (.EXE), DOS (Standart), в Memory Model - Large, установи голочку BGI. Можно еще написать исходник на C, и за тем скомпилить:
                            ExpandedWrap disabled
                              bcc my.c +graphics.lib

                            ;)
                              Последний вопрос, самый тупой.
                              Сделал, как Мяут сказал, сообщений об ошибке не последовало, но монитор показал черный экран и даже выключаться (при нажатии на кнопку on/off!) отказался. :rolleyes:
                              Полез в настройки, а он, оказывается, меньше, чем 800*600 не поддерживает.
                              Есть преламерское мнение, что по этой причине хрен мне, а не досовскую графику.
                              Я прав?
                                Цитата Ламер, 21.11.04, 18:51
                                Полез в настройки, а он, оказывается, меньше, чем 800*600 не поддерживает.

                                Не поддерживает XP. А BGI-дрова поддерживают. В случае чего, видюха запускает эмуляцию :tong:
                                  Цитата Ламер, 21.11.04, 18:51
                                  Я прав?
                                  Врядли. У меня, например, вполне нормально запускается HIEW.
                                  Запускаешь в полноэкранном или оконном режиме?
                                    В полноэкранном запускаю.
                                      Забавно.
                                      В оконном она пишет BGI Error: Graphics not initialized (use 'initgraph'), а в полноэкранном просто гаснет экран, как будто сигнал прекращается.
                                      При создании проекта выбираю Application (exe) {Exetuble в списке нет}, DOS (стандарт), Large, флажок BGI.
                                      Текст дословно Трэйнера. :unsure:
                                        Приведенный мной код должен работать, если драйвер BGI находится в той же папке, что и сама программа. Иначе - надо указать путь к драйверу BGI третьим параметром функции initgraph
                                          Человеку надо под Win32 писать, а вы ДОСовскую программу его заставляете запускать под XP. В общем ставить нужно Visual Studio или C++ Builder. В них создать окно new TForm(в билдере) или new CWnd (в VS). А там уже рисовать надо. И не нужно никаких OpenGL (человек линию хочет провести).
                                          Советую посмотреть хелп по соответствующей системе.
                                            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 писать
                                            ? :)
                                              Цитата Anubis The God, 22.11.04, 09:47
                                              Человеку надо под Win32 писать, а вы ДОСовскую программу его заставляете запускать под XP

                                              У меня же все работает :P И в той же комбинации. Простог неправильно собран проект, вот и все <_<
                                                Цитата 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.
                                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                0 пользователей:


                                                Рейтинг@Mail.ru
                                                [ Script execution time: 0.1122 ]   [ 15 queries used ]   [ Generated: 4.07.26, 11:44 GMT ]