|
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
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|