2012-12-25 1 views
-1

출력에 프레임을 그리려합니다.커서를 새로운 줄로 이동하지 않고도 gotoxy (80, 25) 위치에 문자 작성

내 창 크기는 I가 성공적으로 코드 아래 사용하여 모든 라인을 그린의 80x25 (문자 폭 x 높이)

입니다. 하지만 마지막 지점 (80, 25)에 쓰면 커서를 처리 할 수없는 다음 줄로 커서가 이동합니다.

내 코드는 다음과 같습니다 : 25

#include <iostream.h> 
#include <conio.h> 

void DrawFrame(int); 
void DrawHoriLine(int, int, int, int, int); 

void main() 
{ 
    clrscr(); 
    DrawFrame(GREEN); 
    getch(); 
} 

void DrawFrame(int color) 
{ 
    DrawHoriLine(2, 1, 78, 205, color); 
    DrawHoriLine(2, 3, 78, 196, color); 
    DrawHoriLine(2, 22, 78, 196, color); 
    DrawHoriLine(2, 24, 78, 205, color); 
    gotoxy(1, 3); cprintf("%c", 198); 
    gotoxy(80, 3); cprintf("%c", 181); 
    gotoxy(1, 1); cprintf("%c", 213); 
    gotoxy(80, 1); cprintf("%c", 184); 
    gotoxy(1, 25); cprintf("%c", 212); 
    gotoxy(80, 25); cprintf("%c", 190); //*** Here is problem 
} 

void DrawHoriLine(int x, int y, int length, int charCode, int color) 
{ 
    gotoxy(x, y); 
    textcolor(color); 
    for (int i=0; i<length; i++) 
     cprintf("%c", charCode); 
} 

는 마지막 행과 다음 행으로 커서를 이동하면 내 프레임이 병에 표시하게된다. 이전에 그린 모든 수평선은 하나씩 위로 이동합니다.

나는 이것이 비정상적인 행동이 아닙니다.
하지만이 옵션을 없애기위한 다른 옵션은 없습니까? 그렇지 않으면 내 프레임에서 마지막 줄을 사용할 수 없습니다.

DosBox를 사용하여 Windows 8 x64 OS에서 Turbo C++을 실행하고 있습니다. 그래서 난 항상 수동으로 윈도우의 속성에서 창 높이를 설정할 수 없습니다.

+0

'SetConsoleCursorPosition'을 시도해 보면 다시 상단 라인으로 설정할 수 있습니다. 작동하지 않는다면 아마도'ScrollConsoleScreenBuffer'입니다. – chris

+0

20 살짜리 컴파일러를 사용하는 이유가 있습니까? – user93353

+0

아니요 ..-(@chris이 기능은 Turbo C++에서 작동하지 않습니다. 도움말 색인에서 이러한 항목을 검색했습니다. – shashwat

답변

2

터미널 텍스트 모드 해상도는 80 x 24입니다. 25 개가 아닌 24 개까지 그리세요.

최대한 빨리 TC를 제거하십시오. TC를 없애고 나서 체크 아웃을하십시오.

+0

왜 이것이 downvoted인지 확실하지 않고, 이유를 제안하는 코멘트가 있어야합니다! –

+0

왜 투표가 실패했는지 알지 못합니다. 텍스트 터미널의 텍스트 해상도는 80 x 24입니다. 시스템이 부팅 될 때 리얼 모드의 0xb8000 영역에서이 텍스트 모드 메모리 용으로 80 x 24 x 2 바이트가 예약됩니다. 1 바이트의 텍스트는 ASCII 값을 나타냅니다. – phoxis

+2

PC에는 항상 25 개의 라인이 있습니다. [PC 공통 텍스트 모드] (http://en.wikipedia.org/wiki/Text_mode#PC_common_text_modes)를 참조하십시오. –

0

24/25 라인 제한을 연장 할 수 있다고 생각합니다. 명령 프롬프트는 꽤 오래 스크롤해야합니다.