다음을 통해 공유


화면 버퍼의 콘텐츠 스크롤

Important

이 문서에서는 더 이상 에코시스템 로드맵의 일부가 되지 않는 콘솔 플랫폼 기능에 대해 설명합니다. 이 콘텐츠를 신제품에서 사용하지 않는 것이 좋지만, 무기한 앞으로도 기존 사용을 계속 지원할 것입니다. 선호하는 최신 솔루션은 플랫폼 간 시나리오에서 최대 호환성을 위해 가상 터미널 시퀀스에 중점을 둡니다. 이 디자인 결정에 대한 자세한 내용은 클래식 콘솔과 가상 터미널 문서에서 확인할 수 있습니다.

ScrollConsoleScreenBuffer 함수는 화면 버퍼의 한 부분에서 동일한 화면 버퍼의 다른 부분으로 문자 셀 블록을 이동합니다. 이 함수는 이동할 원본 사각형의 왼쪽 위와 오른쪽 아래 셀과 왼쪽 위 셀에 대한 새 위치의 대상 좌표를 지정합니다. 원본 셀의 문자 및 색 데이터가 새 위치로 이동되고 이동으로 비어 있는 셀은 지정된 문자와 색으로 채워집니다. 클리핑 사각형을 지정하면 외부 셀은 변경되지 않은 상태로 유지됩니다.

ScrollConsoleScreenBuffer 는 줄에서 첫 번째 셀의 좌표를 대상 좌표로 지정하고 줄 아래의 모든 행을 포함하는 스크롤 사각형을 지정하여 선을 삭제하는 데 사용할 수 있습니다.

다음 예제에서는 클리핑 사각형을 사용하여 콘솔 화면 버퍼의 아래쪽 15개 행만 스크롤하는 방법을 보여 줍니다. 지정된 사각형의 행은 한 번에 한 줄 위로 스크롤되고 블록의 맨 위 행은 분리됩니다카드. 클리핑 사각형 외부에 있는 콘솔 화면 버퍼의 내용은 변경되지 않은 상태로 유지됩니다.

#include <windows.h>
#include <stdio.h>

int main( void )
{
    HANDLE hStdout;
    CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
    SMALL_RECT srctScrollRect, srctClipRect;
    CHAR_INFO chiFill;
    COORD coordDest;
    int i;

    printf("\nPrinting 20 lines for reference. ");
    printf("Notice that line 6 is discarded during scrolling.\n");
    for(i=0; i<=20; i++)
        printf("%d\n", i);

    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

    if (hStdout == INVALID_HANDLE_VALUE)
    {
        printf("GetStdHandle failed with %d\n", GetLastError());
        return 1;
    }

    // Get the screen buffer size.

    if (!GetConsoleScreenBufferInfo(hStdout, &csbiInfo))
    {
        printf("GetConsoleScreenBufferInfo failed %d\n", GetLastError());
        return 1;
    }

    // The scrolling rectangle is the bottom 15 rows of the
    // screen buffer.

    srctScrollRect.Top = csbiInfo.dwSize.Y - 16;
    srctScrollRect.Bottom = csbiInfo.dwSize.Y - 1;
    srctScrollRect.Left = 0;
    srctScrollRect.Right = csbiInfo.dwSize.X - 1;

    // The destination for the scroll rectangle is one row up.

    coordDest.X = 0;
    coordDest.Y = csbiInfo.dwSize.Y - 17;

    // The clipping rectangle is the same as the scrolling rectangle.
    // The destination row is left unchanged.

    srctClipRect = srctScrollRect;

    // Fill the bottom row with green blanks.

    chiFill.Attributes = BACKGROUND_GREEN | FOREGROUND_RED;
    chiFill.Char.AsciiChar = (char)' ';

    // Scroll up one line.

    if(!ScrollConsoleScreenBuffer(  
        hStdout,         // screen buffer handle
        &srctScrollRect, // scrolling rectangle
        &srctClipRect,   // clipping rectangle
        coordDest,       // top left destination cell
        &chiFill))       // fill character and color
    {
        printf("ScrollConsoleScreenBuffer failed %d\n", GetLastError());
        return 1;
    }
return 0;
}

화면 버퍼의 창 스크롤

화면 버퍼 스크롤