Udostępnij przez


Przewijanie buforu ekranu

Ważne

W tym dokumencie opisano funkcje platformy konsolowej, które nie są już częścią naszego planu działania ekosystemu. Nie zalecamy używania tej zawartości w nowych produktach, ale będziemy nadal obsługiwać istniejące użycie w przyszłości na czas nieokreślony. Nasze preferowane nowoczesne rozwiązanie koncentruje się na sekwencjach terminali wirtualnych w celu zapewnienia maksymalnej zgodności w scenariuszach międzyplatformowych. Więcej informacji na temat tej decyzji projektowej można znaleźć w naszym dokumencie dotyczącym klasycznej konsoli i terminalu wirtualnego .

W oknie konsoli zostanie wyświetlona część aktywnego buforu ekranu. Każdy bufor ekranu zachowuje własny prostokąt bieżącego okna, który określa współrzędne komórek znaków w lewym górnym i dolnym rogu, które mają być wyświetlane w oknie konsoli. Aby określić bieżący prostokąt okna buforu ekranu, użyj polecenia GetConsoleScreenBufferInfo. Po utworzeniu buforu ekranu lewy górny róg okna znajduje się w lewym górnym rogu buforu ekranu konsoli (0,0).

Prostokąt okna może ulec zmianie, aby wyświetlić różne części buforu ekranu konsoli. Prostokąt okna bufora ekranu może ulec zmianie w następujących sytuacjach:

  • Gdy polecenie SetConsoleWindowInfo jest wywoływane w celu określenia nowego prostokąta okna, przewija widok buforu ekranu konsoli, zmieniając położenie prostokąta okna bez zmiany rozmiaru okna. Aby zapoznać się z przykładami przewijania zawartości okna, zobacz Przewijanie okna buforu ekranu.

    okno buforu ekranu przesuwające się wokół dużego buforu zawartości

  • W przypadku używania funkcji WriteFile do zapisywania w buforze ekranu z zawijaniem w trybie wyjściowym końca wiersza (EOL) jest automatycznie przesuwany prostokąt okna, dzięki czemu kursor jest zawsze wyświetlany.

  • Gdy funkcja SetConsoleCursorPosition określa nową pozycję kursora, która znajduje się poza granicami bieżącego prostokąta okna, prostokąt okna przesuwa się automatycznie, aby wyświetlić kursor.

  • Gdy użytkownik zmieni rozmiar okna konsoli lub używa pasków przewijania okna, prostokąt okna aktywnego buforu ekranu może ulec zmianie. Ta zmiana nie jest zgłaszana jako zdarzenie zmiany rozmiaru okna w buforze wejściowym.

W każdej z tych sytuacji prostokąt okna przesuwa się, aby wyświetlić inną część buforu ekranu konsoli, ale zawartość bufora ekranu konsoli pozostaje w tej samej pozycji. Następujące sytuacje mogą spowodować przesunięcie zawartości buforu ekranu konsoli:

  • Po wywołaniu funkcji ScrollConsoleScreenBuffer prostokątny blok jest kopiowany z jednej części buforu ekranu do innej.
  • W przypadku zapisywania w buforze ekranu za pomocą funkcji WriteFile z włączonym trybem zawijania w trybie wyjściowym EOL zawartość bufora ekranu konsoli jest automatycznie przewijany po napotkaniu końca buforu ekranu konsoli. To przewijanie odrzuca górny wiersz buforu ekranu konsoli.

ScrollConsoleScreenBuffer określa prostokąt buforu ekranu konsoli, który jest przenoszony, a nowe lewe górne współrzędne, do których jest kopiowany prostokąt. Ta funkcja może przewijać część lub całą zawartość buforu ekranu konsoli.

Ilustracja przedstawia operację ScrollConsoleScreenBuffer , która przewija całą zawartość buforu ekranu konsoli w górę o kilka wierszy. Zawartość pierwszych wierszy jest odrzucana, a dolne wiersze są wypełnione określonym znakiem i kolorem.

okno buforu ekranu z przewijającą zawartość od góry, aby odrzucić

Efekty funkcji ScrollConsoleScreenBuffer można ograniczyć, określając opcjonalny prostokąt wycinków, tak aby zawartość buforu ekranu konsoli poza prostokątem wycinków nie zmieniała się. Efektem wycinka jest utworzenie podwindow (prostokąt wycinka), którego zawartość jest przewijana bez wpływu na pozostałą część buforu ekranu konsoli. Aby zapoznać się z przykładem korzystającym z funkcji ScrollConsoleScreenBuffer, zobacz Przewijanie zawartości buforu ekranu.