На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (16) « Первая ... 5 6 [7] 8 9 ...  15 16 все  ( Перейти к последнему сообщению )  
> эмуляция BGI графики
    Цитата Der_Meister @
    Кстати, кто-нибудь знает, как юзать pc-спикер под виндой?
    Beep вроде.
      Цитата trainer @
      Beep вроде


      Фига. Эта функция работает только под линейкой NT. Под 9х - выдает через звуковуху дефолтовый звук.

      Хотя люди как-то делают - см. ХамелеонКлок. Одно из двух - либо прямо драйвер зовут, либо сами через порты. Или какой-то другой недокументированный хитропопый трюк мелкософтов.
        Сейчас эмуляция BGI-графики реализована?
          Цитата helli @
          Сейчас эмуляция BGI-графики реализована?
          да, но не полностью. Смотри на странмчке в Wiki.
            Пока машины у меня нет, появится через недельку. Планирую заняться DGML вплотную.
              Вот и я. Пойду разгребать исходники...
                Функции slepp, sound и т.п. выносить в отдельный хидер? То есть чтоб так и было, как в оригинале:
                ExpandedWrap disabled
                  #include <graphics.h>
                  #include <dos.h>


                или все в graphics.h спихнуть?

                Добавлено
                Такой вопрос возник в связи с заголовком stdlib.h, который заменятьб нельзя

                ExpandedWrap disabled
                      //======================================================================================
                      // ИЗ DOS.H
                      //======================================================================================
                   
                      // приостанавливает выполнение программы на заданное количество миллисекунд
                      void delay(unsigned milliseconds);
                   
                      // приостанавливает выполнение программы на заданное количество секунд
                      void sleep(unsigned seconds);
                   
                      // включает PC-спикер на заданную частоту
                      void sound(unsigned frequency);
                   
                      // выключает PC-спикер
                      void nosound(void);
                   
                      //======================================================================================
                      // ИЗ STDLIB.H
                      //======================================================================================
                   
                      // инициализирует генератор случайных чисел
                      void randomize(void);
                  Реализую функцию sound через таймер, который с интервалом воспроизводит короткие звуковые сигналы. Однако появились траблы с тем, что графику-то юзер может не инициализировать, поэтому функция обработки сообщений недоступна.

                  Если посылать сообщения другой функции, надо в прогу втыкать цикл обработки сообщений:
                  Цитата MSDN
                  If your application creates a timer without specifying a window handle, your application must monitor the message queue for WM_TIMER messages and dispatch them to the appropriate window.


                  Замкнутый круг... :wall:

                  Добавлено
                  ExpandedWrap disabled
                    // включает PC-спикер на заданную частоту
                    void DGML::sound(unsigned frequency)
                    {
                        //звук не воспроизводится
                        if (!DGML_Stuff::timer_id)
                        {
                            //создаем таймер, который будет петь
                            DGML_Stuff::timer_id=SetTimer(NULL, 10,100, (TIMERPROC)DGML_Stuff::sound_handler);
                     
                        }
                     
                    }
                     
                    // выключает PC-спикер
                    void DGML::nosound(void)
                    {
                        KillTimer(NULL,DGML_Stuff::timer_id);
                        DGML_Stuff::timer_id=0;
                    }
                     
                    //обработчик звука
                    void CALLBACK DGML_Stuff::sound_handler(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime)
                    {
                        Beep(440, 1000);
                    }


                  Добавлено
                  Реализовал через timeSetEvent. Получилось убого. Требует Winmm.lib, хрипит и ресурсы жрет понапрасну. Надо искать другое решение...

                  Да и вообще что-то кроссплатформенное.
                    Пожалуйста, напиши kbhit()
                    Я уверен, это несложно
                      Цитата Der_Meister @
                      Да и вообще что-то кроссплатформенное.


                      Это вряд ли. Разве что использовать сторонние библиотеки - напр. http://www.fmod.org - моя любимая, есть практически под все. А так - очевидно нужно мспользовать DirectSound - но я тут не гуру - не было времени разбираться, в итоге заюзал ФМОД как обертку.
                        barazuk
                        fmod не держит pc speaker имхо. А может ну его, pc speaker, выводить через колонки?


                        angrylion
                        ок

                        Добавлено
                        А насчет хидеров что?
                          Цитата Der_Meister @
                          fmod не держит pc speaker имхо


                          Ну конечно, кому оно надо?

                          Цитата Der_Meister @
                          А может ну его, pc speaker, выводить через колонки?


                          :blink: А я по-другому и не мыслил. Все равно через спикер под 9х не получится и вообще не портабельно...
                            Ладно, оставим пока этот вопрос... Щас пляски с бубмном в расшифровке хранения картинок в BGI.

                            Ведь на уровне памяти тоже картинки должны совпадать, не так ли? А то было бы совсем легко...
                              Цитата Der_Meister @
                              Ладно, оставим пока этот вопрос... Щас пляски с бубмном в расшифровке хранения картинок в BGI.


                              Когда-то расковыривал. Ничего особо сложного - но аппаратно-зависимое там все. Так что для VGA 0х13, для а-ля EGA 16 цветов и CGA-шных - все разные...


                              Кстати, а нужно ли вообще этим заниматься (реализацией 1:1)? Главное, чтобы сохраняло/восстанавливало...
                                Цитата barazuk @
                                Кстати, а нужно ли вообще этим заниматься (реализацией 1:1)? Главное, чтобы сохраняло/восстанавливало...

                                Я тоже над этим думаю, вдруг кому-нибудь, вроде меня, понадобится вывести битовый образ в файл.

                                Там интересно так... 1 пиксел весит 10 байт. 4 пиксела весят 10 байт. 5 пикселов - уже 18 вроде. Самое главное, BGI "портит" всю предоставленную ему память. То есть обнуляешь массив, а он вместо 1 пиксела еще 3 левых пишет и т.д.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (16) « Первая ... 5 6 [7] 8 9 ...  15 16 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0537 ]   [ 14 queries used ]   [ Generated: 24.05.24, 00:54 GMT ]