На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> 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:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1051 ]   [ 16 queries used ]   [ Generated: 4.07.26, 10:52 GMT ]