Scrolling the Screen Buffer
The console window displays a portion of the active screen buffer. Each screen
buffer maintains its own current window rectangle that specifies the
coordinates of the upper left and lower right character cells to be displayed in the
console window. To determine the current window rectangle of a screen buffer, use
GetConsoleScreenBufferInfo. When a screen buffer is created, the upper left corner of its window is at
the upper left corner of the screen buffer at (0,0).
The window rectangle can change to display different parts of the screen
buffer. The window rectangle of a screen buffer can change in the following
situations:
- When SetConsoleWindowInfo is called to specify a new window rectangle, it scrolls the view of the
screen buffer by changing the position of the window rectangle without changing the
size of the window. For examples of scrolling the window's contents, see Scrolling a Screen Buffer's Window.
- When using the WriteFile function to write to a screen buffer with wrap at end-of-line (EOL) output
mode enabled, the window rectangle shifts automatically, so the cursor is always
displayed.
- When the SetConsoleCursorPosition function specifies a new cursor position that is outside the boundaries of
the current window rectangle, the window rectangle shifts automatically to
display the cursor.
- When the user changes the size of the console window or uses the window's
scroll bars, the window rectangle of the active screen buffer can change. This
change is not reported as a window resizing event in the input buffer.
In each of these situations, the window rectangle shifts to display a
different part of the screen buffer, but the contents of the screen buffer remain in
the same position. The following situations can cause the screen buffer's
contents to shift:
- When the ScrollConsoleScreenBuffer function is called, a rectangular block is copied from one part of a screen
buffer to another.
- When using WriteFile to write to a screen buffer with wrap at EOL output mode enabled, the screen
buffer's contents scroll automatically when the end of the screen buffer is
encountered. This scrolling discards the top row of the screen buffer.
ScrollConsoleScreenBuffer specifies the screen buffer rectangle that is moved and the new upper left
coordinates to which the rectangle is copied. This function can scroll a portion
or the entire contents of the screen buffer.
The illustration shows a
ScrollConsoleScreenBuffer operation that scrolls the entire contents of the screen buffer up by several
rows. The contents of the top rows are discarded, and the bottom rows are
filled with a specified character and color.
The effects of
ScrollConsoleScreenBuffer can be limited by specifying an optional clipping rectangle so that the
contents of the screen buffer outside the clipping rectangle are unchanged. The
effect of clipping is to create a subwindow (the clipping rectangle) whose contents
are scrolled without affecting the rest of the screen buffer. For an example
that uses
ScrollConsoleScreenBuffer, see
Scrolling a Screen Buffer's Contents.
Cursor Appearance and Position
A screen buffer's cursor can be visible or hidden. When it is visible, its
appearance can vary, ranging from from completely filling a character cell to
appearing as a horizontal line at the bottom of the cell. To retrieve information
about the appearance and visibility of the cursor, use the
GetConsoleCursorInfo function. This function reports whether the cursor is visible and describes
the appearance of the cursor as the percentage of a character cell that it
fills. To set the appearance and visibility of the cursor, use the
SetConsoleCursorInfo function.
Characters written by the high-level console I/O functions are written at the
current cursor location, advancing the cursor to the next location. To
determine the current cursor position in the coordinate system of a screen buffer, use
GetConsoleScreenBufferInfo. You can use
SetConsoleCursorPosition to set the cursor position and, thereby, control the placement of text that
is written or echoed by the high-level I/O functions. If you move the cursor,
text at the new cursor location is overwritten.
The position, appearance, and visibility of the cursor are set independently
for each screen buffer.
Screen Buffer Color Attributes
Each screen buffer character cell stores the color attributes for the colors
used in drawing the text and background of that cell. An application can set the
color data for each character cell individually, storing the data in the
Attributes member of the
CHAR_INFO structure for each cell.
The current text attributes of each screen buffer determine the foreground
(text) and background colors of characters subsequently written or echoed by the
high-level functions. An application can use
GetConsoleScreenBufferInfo to determine the current text attributes of a screen buffer and the
SetConsoleTextAttribute function to set the text attributes. Changing a screen buffer's text
attributes does not affect the display of characters previously written. These text
attributes do not affect characters written by the low-level console I/O functions
(such as the
WriteConsoleOutput or
WriteConsoleOutputCharacter function) which either explicitly specify the attributes for each cell that
is written or leave the attributes unchanged at the written positions.
The following attribute constants are defined in the WINCON.H header file:
- FOREGROUND_BLUE
- FOREGROUND_GREEN
- FOREGROUND_RED
- FOREGROUND_INTENSITY
- BACKGROUND_BLUE
- BACKGROUND_GREEN
- BACKGROUND_RED
- BACKGROUND_INTENSITY
The foreground attributes specify the text color, and the background
attributes specify the color used to fill the cell's background. An application can
combine the constants to achieve different colors. For example, the following
combination results in bright cyan text on a blue background.
FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE
If no background constant is specified, the background is black, and if no
foreground constant is specified, the text is black. For example, the following
combination produces black text on a white background.
BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database