콘솔 화면 버퍼

화면 버퍼는 콘솔 창에서 출력할 문자 및 색 데이터의 2차원 배열입니다. 콘솔에는 여러 개의 화면 버퍼가 있을 수 있습니다. 활성 화면 버퍼는 화면에 표시되는 버퍼입니다.

시스템은 새 콘솔을 만들 때마다 화면 버퍼를 만듭니다. 콘솔의 활성 화면 버퍼에 대한 핸들을 열려면 CONOUT$ 값을 CreateFile 함수 호출에 지정합니다. 프로세스에서 CreateConsoleScreenBuffer 함수를 사용하여 콘솔에 대한 추가 화면 버퍼를 만들 수 있습니다. 새 화면 버퍼의 핸들이 SetConsoleActiveScreenBuffer 함수 호출에 지정될 때까지 해당 버퍼는 활성화되지 않습니다. 그러나 화면 버퍼는 활성 또는 비활성인지 여부에 관계없이 읽기 및 쓰기를 위해 액세스할 수 있습니다.

각 화면 버퍼에는 문자 정보 레코드의 고유한 2차원 배열이 있습니다. 각 문자의 데이터는 유니코드 또는 ANSI 문자 및 해당 문자가 표시되는 전경색과 배경색을 지정하는 CHAR_INFO 구조체에 저장됩니다.

화면 버퍼와 관련된 여러 속성은 각 화면 버퍼에 대해 개별적으로 설정할 수 있습니다. 즉, 활성 화면 버퍼를 변경하면 콘솔 창의 모양에 큰 영향을 줄 수 있습니다. 화면 버퍼와 관련된 속성은 다음과 같습니다.

  • 화면 버퍼 크기(문자 행 및 열)
  • 텍스트 특성(WriteFile 또는 WriteConsole 함수에서 쓰는 텍스트를 표시하기 위한 전경색 및 배경색)
  • 창 크기 및 위치(콘솔 창에 표시되는 콘솔 화면 버퍼의 사각형 영역)
  • 커서 위치, 모양 및 표시 유형
  • 출력 모드(ENABLE_PROCESSED_OUTPUTENABLE_WRAP_AT_EOL_OUTPUT). 콘솔 출력 모드에 대한 자세한 내용은 고수준 콘솔 모드를 참조하세요.

화면 버퍼가 만들어지면 공백 문자가 모든 위치에 포함됩니다. 커서가 버퍼의 원점(0,0)에 표시되고 배치되며, 창은 버퍼의 원점에서 왼쪽 위 모서리에 배치됩니다. 콘솔 화면 버퍼 크기, 창 크기, 텍스트 특성 및 커서 모양은 사용자 또는 시스템 기본값에 따라 결정됩니다. 콘솔 화면 버퍼와 관련된 다양한 속성의 현재 값을 검색하려면 GetConsoleScreenBufferInfo, GetConsoleCursorInfoGetConsoleMode 함수를 사용합니다.

콘솔 화면 버퍼 속성을 변경하는 애플리케이션은 자체 화면 버퍼를 만들거나 시작 중에 상속된 화면 버퍼의 상태를 저장하고 종료 시 복원해야 합니다. 이 협업 동작은 동일한 콘솔 세션을 공유하는 다른 애플리케이션에서 변경의 영향을 받지 않도록 하는 데 필요합니다.

이 목적을 위해 가능한 경우 두 번째 화면 버퍼를 만드는 대신 대체 버퍼 모드를 사용하는 것이 좋습니다. 대체 버퍼 모드는 원격 디바이스 및 다른 플랫폼과의 호환성을 향상시킵니다. 자세한 내용은 클래식 콘솔 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 함수는 지정된 콘솔 화면 버퍼에서 사용하는 글꼴 크기를 검색합니다.

참고 항목

함수를 사용하여 글꼴 정보를 찾고 조작하지 않는 것이 좋습니다. 사용자가 글꼴을 사용자 지정할 수 있는 호스트 환경과의 호환성뿐만 아니라 플랫폼 간 호환성도 보장하기 위해 명령줄 애플리케이션을 글꼴 중립적인 방식으로 작동하는 것이 좋습니다. 사용자 기본 설정 및 터미널을 포함한 호스트 환경에 대한 자세한 내용은 에코시스템 로드맵을 참조하세요.