Wednesday, November 15, 2006
C언어 VC++] 화면 지우기 함수(cls); 도스창/콘솔 지우는 방법; Console Clear Screen Function
도스창(정식 명칭은 '명령 프롬프트' 또는 콘솔)의 화면을 지우는 명령어인 cls 를 구현한 것입니다. 그런데 상당히 복잡합니다. 또한 윈도우에서만 작동하고 리눅스C에서는 안되는 한계가 있습니다. 왜냐하면 텍스트 모드 창의 화면을 지우는 작업을, 터미널이나 운영체제에 독립적으로 하는 것이 불가능하기 때문입니다.
파일명: 0.cpp
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
위의 예제를 실행하면 테스트용 문자열들이 우선 나옵니다. 아무 키나 누르면 현재 도스창 화면이 완전히 지워지고, 커서 위치도 초기화됩니다.
참고: ▶▶ Java/자바] 도스창(콘솔) 화면 지우는 방법; Clear Screen, Console Terminal Text Mode
Visual C++ / 화면 지우기(CLS) 함수와 예제 소스
파일명: 0.cpp
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#include <stdio.h>
#include <conio.h> // 예제 속의 getch() 함수를 위해
#include <Windows.h>
void cls(HANDLE hConsole);
int main(void) {
puts("이런저런 문자열들...");
puts("이런저런 문자열들...");
puts("이런저런 문자열들...");
puts("");
puts("이제 화면을 지우겠습니다. 아무 키나 누르세요.");
getch(); // 화면 중지
// 현재 도스창에 대한 핸들 얻기
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
cls(hConsole);
return 0;
}
// 원본 소스: http://support.microsoft.com/kb/q99261/
// 여기서부터, 화면 지우기 함수가 시작됨
/* Standard error macro for reporting API errors */
#define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
void cls( HANDLE hConsole )
{
COORD coordScreen = { 0, 0 }; /* here's where we'll home the
cursor */
BOOL bSuccess;
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */
DWORD dwConSize; /* number of character cells in
the current buffer */
/* get the number of character cells in the current buffer */
bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
PERR( bSuccess, "GetConsoleScreenBufferInfo" );
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
/* fill the entire screen with blanks */
bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
dwConSize, coordScreen, &cCharsWritten );
PERR( bSuccess, "FillConsoleOutputCharacter" );
/* get the current text attribute */
bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
PERR( bSuccess, "ConsoleScreenBufferInfo" );
/* now set the buffer's attributes accordingly */
bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
dwConSize, coordScreen, &cCharsWritten );
PERR( bSuccess, "FillConsoleOutputAttribute" );
/* put the cursor at (0, 0) */
bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );
PERR( bSuccess, "SetConsoleCursorPosition" );
return;
}
#include <conio.h> // 예제 속의 getch() 함수를 위해
#include <Windows.h>
void cls(HANDLE hConsole);
int main(void) {
puts("이런저런 문자열들...");
puts("이런저런 문자열들...");
puts("이런저런 문자열들...");
puts("");
puts("이제 화면을 지우겠습니다. 아무 키나 누르세요.");
getch(); // 화면 중지
// 현재 도스창에 대한 핸들 얻기
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
cls(hConsole);
return 0;
}
// 원본 소스: http://support.microsoft.com/kb/q99261/
// 여기서부터, 화면 지우기 함수가 시작됨
/* Standard error macro for reporting API errors */
#define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
void cls( HANDLE hConsole )
{
COORD coordScreen = { 0, 0 }; /* here's where we'll home the
cursor */
BOOL bSuccess;
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */
DWORD dwConSize; /* number of character cells in
the current buffer */
/* get the number of character cells in the current buffer */
bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
PERR( bSuccess, "GetConsoleScreenBufferInfo" );
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
/* fill the entire screen with blanks */
bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
dwConSize, coordScreen, &cCharsWritten );
PERR( bSuccess, "FillConsoleOutputCharacter" );
/* get the current text attribute */
bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
PERR( bSuccess, "ConsoleScreenBufferInfo" );
/* now set the buffer's attributes accordingly */
bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
dwConSize, coordScreen, &cCharsWritten );
PERR( bSuccess, "FillConsoleOutputAttribute" );
/* put the cursor at (0, 0) */
bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );
PERR( bSuccess, "SetConsoleCursorPosition" );
return;
}
위의 예제를 실행하면 테스트용 문자열들이 우선 나옵니다. 아무 키나 누르면 현재 도스창 화면이 완전히 지워지고, 커서 위치도 초기화됩니다.
참고: ▶▶ Java/자바] 도스창(콘솔) 화면 지우는 방법; Clear Screen, Console Terminal Text Mode
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home