Мгновенный вывод символа в позицию консоли

Тема в разделе "Общие вопросы по С и С++", создана пользователем mspSUSE, 29 мар 2015.

  1. mspSUSE

    mspSUSE New Member

    Регистрация:
    20 июл 2009
    Сообщения:
    3
    Симпатии:
    0
    Посмотрите, пожалуйста, код,
    он компилируется на TDM GCC,
    но к сожалению результирующий файл не работает под Windows 7, 8, 32-64 bits
    Помогите, пожалуйста, разобраться.
    Код (Text):
              # include <stdio.h>
              # include <conio.h>
              # include <iostream>
              # include <windows.h>
     
              void print_xy (
                              int x, // абсцисса
                              int y, // ордината
                              char s, // cимвол
                              int color, // цвет символа
                              int fon // фон символа
                            )
              {
                // Этот код компилируется под Borland C++ 3.1 и
                // и программа работает под Windows 7 32 bit
               
                // Но этот код хотя и компилируется под TDM-GCC Dev-C++
                // но, увы, не работает под Windows 7 32 bit -
                // зависает с ошибкой :-(
               
                // Код нужен, для того, чтобы постоянно выводить
                // текущее время в опредленные позиции консоли во
                // во время работы текстового редактора
     
                /*
                  // MSP, 15.01.99, 10:54
                  молниеносный вывод символа на экран, через видеопамять.
                  модель памяти Large
     
                  Иногда бывает удобно или необходимо изменить модель памяти
                  для отдельных функций или данных. Это изменение можно
                  произвести с помощью модификаторов near, far и huge.
     
                  char far *
                    data;
     
                  Указатель data теперь является дальним указателем независимо
                  от того, какая модель памяти указана компилятору при обработке
                  программы.
                  Я указал Compact. А для data будет работать Large.
                */
     
                /*
                  MSP, 23.03.15, 21:46
                  По каким адресам располагается окно консоли?
                  Это правильный код?
                */
               
                char far * v_mem = (char far *) 0xb8000000L;
                v_mem += (x - 1) * 2 + (y - 1) * 160;
                * v_mem ++ = s;
                * v_mem = color + (fon * 16);
     
              } // end void print_xy (int, int, char, int, int)
             
              using namespace std;
     
              int main ()
              {
                system ("cls");
               
                // молниеносный вывод белого символа на синем фоне символа (!)
                // в позицию (10, 8) экрана консоли,
                // при молниеносном выводе
                // курсор отключен, его не видно, он не мигает
                print_xy (10, 8, '!', 15, 1);
               
                getch ();
               
                return 0;
              }
     
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Стандартными средствами это сделать невозможно. Такой код не может быть кроссплатформенным.

    Используйте библиотеку curses - ее авторы реализовали различные версии для различных операционных систем, там решена эта и другие задачи (например вывод цветного текста в консоль).
     
    2 пользователям это понравилось.
  3. mspSUSE

    mspSUSE New Member

    Регистрация:
    20 июл 2009
    Сообщения:
    3
    Симпатии:
    0

    Большое спасибо!
     
Загрузка...

Поделиться этой страницей