콘솔 화면 버퍼
화면 버퍼는 콘솔 창에서 출력할 문자 및 색 데이터의 2차원 배열입니다. 콘솔에는 여러 개의 화면 버퍼가 있을 수 있습니다. 활성 화면 버퍼는 화면에 표시되는 버퍼입니다.
시스템은 새 콘솔을 만들 때마다 화면 버퍼를 만듭니다. 콘솔의 활성 화면 버퍼에 대한 핸들을 열려면 CONOUT$ 값을 CreateFile 함수 호출에 지정합니다. 프로세스에서 CreateConsoleScreenBuffer 함수를 사용하여 콘솔에 대한 추가 화면 버퍼를 만들 수 있습니다. 새 화면 버퍼의 핸들이 SetConsoleActiveScreenBuffer 함수 호출에 지정될 때까지 해당 버퍼는 활성화되지 않습니다. 그러나 화면 버퍼는 활성 또는 비활성인지 여부에 관계없이 읽기 및 쓰기를 위해 액세스할 수 있습니다.
각 화면 버퍼에는 문자 정보 레코드의 고유한 2차원 배열이 있습니다. 각 문자의 데이터는 유니코드 또는 ANSI 문자 및 해당 문자가 표시되는 전경색과 배경색을 지정하는 CHAR_INFO 구조체에 저장됩니다.
화면 버퍼와 관련된 여러 속성은 각 화면 버퍼에 대해 개별적으로 설정할 수 있습니다. 즉, 활성 화면 버퍼를 변경하면 콘솔 창의 모양에 큰 영향을 줄 수 있습니다. 화면 버퍼와 관련된 속성은 다음과 같습니다.
- 화면 버퍼 크기(문자 행 및 열)
- 텍스트 특성(WriteFile 또는 WriteConsole 함수에서 쓰는 텍스트를 표시하기 위한 전경색 및 배경색)
- 창 크기 및 위치(콘솔 창에 표시되는 콘솔 화면 버퍼의 사각형 영역)
- 커서 위치, 모양 및 표시 유형
- 출력 모드(ENABLE_PROCESSED_OUTPUT 및 ENABLE_WRAP_AT_EOL_OUTPUT). 콘솔 출력 모드에 대한 자세한 내용은 고수준 콘솔 모드를 참조하세요.
화면 버퍼가 만들어지면 공백 문자가 모든 위치에 포함됩니다. 커서가 버퍼의 원점(0,0)에 표시되고 배치되며, 창은 버퍼의 원점에서 왼쪽 위 모서리에 배치됩니다. 콘솔 화면 버퍼 크기, 창 크기, 텍스트 특성 및 커서 모양은 사용자 또는 시스템 기본값에 따라 결정됩니다. 콘솔 화면 버퍼와 관련된 다양한 속성의 현재 값을 검색하려면 GetConsoleScreenBufferInfo, GetConsoleCursorInfo 및 GetConsoleMode 함수를 사용합니다.
콘솔 화면 버퍼 속성을 변경하는 애플리케이션은 자체 화면 버퍼를 만들거나 시작 중에 상속된 화면 버퍼의 상태를 저장하고 종료 시 복원해야 합니다. 이 협업 동작은 동일한 콘솔 세션을 공유하는 다른 애플리케이션에서 변경의 영향을 받지 않도록 하는 데 필요합니다.
팁
이 목적을 위해 가능한 경우 두 번째 화면 버퍼를 만드는 대신 대체 버퍼 모드를 사용하는 것이 좋습니다. 대체 버퍼 모드는 원격 디바이스 및 다른 플랫폼과의 호환성을 향상시킵니다. 자세한 내용은 클래식 콘솔 API 및 가상 터미널에 대한 설명을 참조하세요.
커서 모양 및 위치
화면 버퍼의 커서는 표시하거나 숨길 수 있습니다. 표시되는 경우 모양이 문자 셀을 완전히 채우는 것부터 셀 아래쪽에 가로줄로 표시되는 것까지 다양할 수 있습니다. 커서의 모양 및 표시 유형에 대한 정보를 검색하려면 GetConsoleCursorInfo 함수를 사용합니다. 이 함수는 커서가 표시되는지 여부를 보고하고 커서의 모양을 채우는 문자 셀의 백분율로 설명합니다. 커서의 모양과 표시 유형을 설정하려면 SetConsoleCursorInfo 함수를 사용합니다.
고수준 콘솔 I/O 함수에서 쓰는 문자를 현재 커서 위치에 쓰고, 커서를 다음 위치로 이동시킵니다. 화면 버퍼의 좌표계에서 현재 커서 위치를 확인하려면 GetConsoleScreenBufferInfo를 사용합니다. SetConsoleCursorPosition을 사용하여 커서 위치를 설정하고, 이에 따라 고수준 I/O 함수에서 쓰거나 에코하는 텍스트의 배치를 제어할 수 있습니다. 커서가 이동되면 새 커서 위치에 있는 텍스트를 덮어씁니다.
참고 항목
저수준 함수를 사용하여 커서 위치를 찾지 않는 것이 좋습니다. 고급 레이아웃에 필요한 경우 가상 터미널 시퀀스를 사용하여 이 위치를 쿼리하는 것이 좋습니다. 가상 터미널 시퀀스를 기본 설정하는 방법에 대한 자세한 내용은 클래식 함수 및 가상 터미널 문서에서 확인할 수 있습니다.
커서의 위치, 모양 및 표시 유형은 각 화면 버퍼에 대해 개별적으로 설정됩니다.
문자 특성
문자 특성은 색 및 DBCS의 두 가지 클래스로 나눌 수 있습니다. WinCon.h
헤더 파일에 정의되는 특성은 다음과 같습니다.
Attribute | 의미 |
---|---|
FOREGROUND_BLUE | 텍스트 색에 파란색이 포함됩니다. |
FOREGROUND_GREEN | 텍스트 색에 녹색이 포함됩니다. |
FOREGROUND_RED | 텍스트 색에 빨간색이 포함됩니다. |
FOREGROUND_INTENSITY | 텍스트 색이 강조됩니다. |
BACKGROUND_BLUE | 배경색에 파란색이 포함됩니다. |
BACKGROUND_GREEN | 배경색에 녹색이 포함됩니다. |
BACKGROUND_RED | 배경색에 빨간색이 포함됩니다. |
BACKGROUND_INTENSITY | 배경색이 강조됩니다. |
COMMON_LVB_LEADING_BYTE | 선행 바이트입니다. |
COMMON_LVB_TRAILING_BYTE | 후행 바이트입니다. |
COMMON_LVB_GRID_HORIZONTAL | 위쪽 가로입니다. |
COMMON_LVB_GRID_LVERTICAL | 왼쪽 세로입니다. |
COMMON_LVB_GRID_RVERTICAL | 오른쪽 세로입니다. |
COMMON_LVB_REVERSE_VIDEO | 역방향 전경 및 배경 특성입니다. |
COMMON_LVB_UNDERSCORE | 밑줄입니다. |
전경 특성은 텍스트 색을 지정합니다. 배경 특성은 셀의 배경을 채우는 데 사용되는 색을 지정합니다. 다른 특성은 DBCS와 함께 사용됩니다.
애플리케이션은 전경 상수와 배경 상수를 결합하여 다른 색을 얻을 수 있습니다. 예를 들어 다음 조합을 사용하면 밝은 녹청색 텍스트가 파란색 배경에 생성됩니다.
FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE
배경 상수가 지정되지 않으면 배경이 검은색이고, 전경 상수가 지정되지 않으면 텍스트가 검은색입니다. 예를 들어 다음 조합을 사용하면 검은색 텍스트가 흰색 배경에 생성됩니다. 흰색 배경에 결합되는 배경에는 빨간색, 녹색 및 파란색이 지정됩니다. 전경에 대해 플래그 색상이 지정되지 않으므로 검은색입니다.
BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED
각 화면 버퍼 문자 셀은 해당 셀의 전경(텍스트) 및 배경을 그리는 데 사용되는 색에 대한 색 특성을 저장합니다. 애플리케이션은 각 문자 셀에 대한 색 데이터를 개별적으로 설정하여 데이터를 각 셀에 대한 CHAR_INFO 구조체의 Attributes 멤버에 저장할 수 있습니다. 각 화면 버퍼의 현재 텍스트 특성은 이후에 고수준 함수에서 쓰거나 에코하는 문자에 사용됩니다.
애플리케이션에서 GetConsoleScreenBufferInfo를 사용하여 화면 버퍼의 현재 텍스트 특성을 결정하고, SetConsoleTextAttribute 함수를 사용하여 문자 특성을 설정할 수 있습니다. 화면 버퍼의 특성을 변경해도 이전에 쓴 문자 표시에는 영향을 주지 않습니다. 이러한 텍스트 특성은 쓰이는 각 셀에 대한 특성을 명시적으로 지정하거나 특성을 변경하지 않은 상태로 유지하는 저수준 콘솔 I/O 함수(예: WriteConsoleOutput 또는 WriteConsoleOutputCharacter 함수)에서 쓰는 문자에 영향을 주지 않습니다.
참고 항목
저수준 함수를 사용하여 기본 및 특정 텍스트 특성을 조작하지 않는 것이 좋습니다. 가상 터미널 시퀀스를 사용하여 텍스트 특성을 설정하는 것이 좋습니다. 가상 터미널 시퀀스를 기본 설정하는 방법에 대한 자세한 내용은 클래식 함수 및 가상 터미널 문서에서 확인할 수 있습니다.
글꼴 특성
GetCurrentConsoleFont 함수는 현재 콘솔 글꼴에 대한 정보를 검색합니다. CONSOLE_FONT_INFO 구조체에 저장된 정보에는 글꼴에 있는 각 문자의 너비와 높이가 포함됩니다.
GetConsoleFontSize 함수는 지정된 콘솔 화면 버퍼에서 사용하는 글꼴 크기를 검색합니다.
참고 항목
함수를 사용하여 글꼴 정보를 찾고 조작하지 않는 것이 좋습니다. 사용자가 글꼴을 사용자 지정할 수 있는 호스트 환경과의 호환성뿐만 아니라 플랫폼 간 호환성도 보장하기 위해 명령줄 애플리케이션을 글꼴 중립적인 방식으로 작동하는 것이 좋습니다. 사용자 기본 설정 및 터미널을 포함한 호스트 환경에 대한 자세한 내용은 에코시스템 로드맵을 참조하세요.