Сдвиг экрана при выводе в послед.строку

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
BreakPointMAN
Сообщения: 38
Зарегистрирован: 21 июн 2004, 02:59
Откуда: Saratov
Контактная информация:

Имеем следующую программку:

Код: Выделить всё

#include "conio.h"

void main()
   {
    textmode(C80);              // переключаемся в цветн.текст. режим 80x25
    window(1,1,80,25);          // опред. лев.верх. и прав.ниж. углы текст.окна
    textattr(WHITE+(BLACK<<4)); // белый цвет символов и черный цвет фона
    clrscr();                   // очищаем экран
    _setcursortype(_NOCURSOR);  // выключаем курсор
    textattr(BLACK+(WHITE<<4)); // пишем черным по белому

    gotoxy(1,1);                // прыгаем в левый верхний угол экрана
    cprintf("TEST");            // выводим пробный текст для теста...

    gotoxy(80,25);              // переходим в 80-ый столбец 25-ой строки
    cprintf("X");               // пытаемся вывести символ

    gotoxy(1,1);                // прыгаем в левый верхний угол экрана
    getch();                    // пауза: ждем нажатия любой клавиши...
}
...При выводе символа 'X' в последнем, 80-ом столбце, последней, 25-ой строки, происходит переход курсора на новую строку и всё, что на экране есть, тоже смещается на одну строку вверх - в результате чего данные, записанные в самом начале, уходят в небытие... При замене оператора gotoxy(80,25) на gotoxy(80,24) или gotoxy(79,25) все работает о'кей: текст, выведенный оператором cprintf("TEST") никуда не девается, и никаких сдвигов не происходит.
...Вопрос: как можно выйти из положения?.. Есть какие-нибудь варианты?.. Средствами самого C++ ? Или придется работать непосредственно с прерываниями и функциями BIOS/DOS под DOS-приложением и WinAPI под Win32-консолью?
BreakPointMAN
Сообщения: 38
Зарегистрирован: 21 июн 2004, 02:59
Откуда: Saratov
Контактная информация:

А ларчик-то просто открывался!..
Syntax

extern int _wscroll

Header File

conio.h

Description

_wscroll is a console I/O flag. Its default value is 1. If you set _wscroll to 0, scrolling is disabled. This can be useful for drawing along the edges of a window without having your screen scroll.
_wscroll should be used only in character-based applications. It is available for EasyWin but is not allowed in 16-bit Windows, Win32s, or Win32 GUI applications.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Верно, а ещё один вариант (в текстовых игрушках часто нужен): пишем напрямую в буфер экрана, не используя никаких Xprintf :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить