Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > полноэкранное текстовое окно (консоль)


Автор: Ветер 19.2.2005, 23:24
Необходимо нарисовать полноэкранное текстовое окошко в консоли. Алгоритм работает, но при рисовании заключительного правого нижнего угла окна курсор автоматом переходит на новую строку и окошко сдвигается вверх. (с++) можно ли заставить курсор не переходить к следующему символу? или кто знает, как вообще рисовали в старину текстовые окна?

Автор: chaos 22.2.2005, 11:03
вот тебе простой пример(без различных проверок)
Код

#include <conio.h>
#include <stdio.h>

int pgraph[2][6] = {{179,191,192,196,217,218},{186,187,200,205,188,201}};
enum type {Single, Double};

void drawWnd(int x1, int y1, int x2, int y2, type a)
{
 int n;

 gotoxy(x1,y1);
 printf("%c",pgraph[a][5]);
 gotoxy(x2,y1);
 printf("%c",pgraph[a][1]);

 for (n=x1+1; n<x2; n++)
 {
   gotoxy(n,y1);
   printf("%c",pgraph[a][3]);
   gotoxy(n,y2);
   printf("%c",pgraph[a][3]);

 }

 for (n=y1+1; n<y2; n++)
 {
   gotoxy(x1,n);
   printf("%c",pgraph[a][0]);
   gotoxy(x2,n);
   printf("%c",pgraph[a][0]);
 }

 gotoxy(x1,y2);
 printf("%c",pgraph[a][2]);
 gotoxy(x2,y2);
 printf("%c",pgraph[a][4]);
}

int main()
{
 _setcursortype(_NOCURSOR);
 clrscr();
 drawWnd(1,1,80,25, Double);
 getch();
 return 0;
}

Автор: chaos 22.2.2005, 11:48
Если и это не поможет, попробуй напрямую работать с видеопамятью
char far *tm_addr = (char far*) MK_FP(0xB800, 0x0000);
должно точно помочь

Автор: chaos 22.2.2005, 14:30
вот еще один пример. работа напрямую через впамять
Код

#include <conio.h>
#include <dos.h>

int pgraph[2][6] = {{179,191,192,196,217,218},{186,187,200,205,188,201}};
char far *tm_addr = (char far*) MK_FP(0xB800, 0x0000);
enum type {Single, Double};

void _print(int x, int y, int symbol, int text_color, int bg_color)
{
 char far *vptr = tm_addr + ((x-1)+(y-1)*80)*2;
 char attr = text_color + (bg_color << 4);
 *(vptr+1) = attr;
 *vptr = symbol;
}


void drawWnd(int x1, int y1, int x2, int y2, type a, int col, int bg)
{
 int n;
 _print(x1,y1,pgraph[a][5],col,bg);
 for (n=x1+1; n<x2; n++)
 {
   _print(n,y1,pgraph[a][3],col,bg);
   _print(n,y2,pgraph[a][3],col,bg);
 }
 _print(x2,y1,pgraph[a][1],col,bg);
 for (n=y1+1; n<y2; n++)
 {
   _print(x1,n,pgraph[a][0],col,bg);
   _print(x2,n,pgraph[a][0],col,bg);
 }
 _print(x1,y2,pgraph[a][2],col,bg);
 _print(x2,y2,pgraph[a][4],col,bg);
}


int main()
{
 _setcursortype(_NOCURSOR);
 textmode(C80);
 clrscr();
 drawWnd(1,1,80,25,Double, 1,0);
 getch();
 return 0;
}

Автор: Hroft 25.2.2005, 10:37
А если в винде, то можно просто эмулировать окно консоли в обычном окошке, выводя моноширинным шрифтом. Не знаю, есть ли функции типа готоху в windows.h... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)