指定Unicode或ANSI字符及其属性。控制台功能使用此结构来读取和写入控制台屏幕缓冲区。
类型声明
typedef struct _CHAR_INFO { union { WCHAR UnicodeChar; CHAR AsciiChar; } Char; WORD Attributes; } CHAR_INFO, *PCHAR_INFO;UnicodeChar 屏幕缓冲区字符单元格的Unicode字符。
AsciiChar 屏幕缓冲区字符单元格的ANSI字符。
Attributes
字符属性。该成员可以是零或以下值的任意组合。
值含义FOREGROUND_BLUE 0x0001文字颜色包含蓝色。FOREGROUND_GREEN 0x0002文字颜色包含绿色。FOREGROUND_RED 0x0004文字颜色包含红色。FOREGROUND_INTENSITY 0x0008文字颜色加强。BACKGROUND_BLUE 0x0010背景颜色包含蓝色。BACKGROUND_GREEN 0x0020背景颜色包含绿色。BACKGROUND_RED 0x0040背景颜色包含红色。BACKGROUND_INTENSITY 0x0080背景颜色加剧。COMMON_LVB_LEADING_BYTE 0x0100前导字节。COMMON_LVB_TRAILING_BYTE 0x0200尾随字节。COMMON_LVB_GRID_HORIZONTAL 0x0400顶部水平COMMON_LVB_GRID_LVERTICAL 0x0800左垂直。COMMON_LVB_GRID_RVERTICAL 0x1000正确的垂直。COMMON_LVB_REVERSE_VIDEO 0x4000反转前景和背景属性。COMMON_LVB_UNDERSCORE 0x8000下划线。在屏幕缓冲区中移动数据块。通过指定剪切矩形可以限制移动的效果,因此剪切矩形外部的控制台屏幕缓冲区的内容不会改变。
函数声明:
BOOL WINAPI ScrollConsoleScreenBuffer( _In_ HANDLE hConsoleOutput, _In_ const SMALL_RECT *lpScrollRectangle, _In_opt_ const SMALL_RECT *lpClipRectangle, _In_ COORD dwDestinationOrigin, _In_ const CHAR_INFO *lpFill ); 功能: 在屏幕缓冲区中移动数据块 参数: hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。 lpScrollRectangle 指定要移动的控制台屏幕缓冲区矩形的左上角和右下角坐标。 lpClipRectangle 指定受滚动影响的控制台屏幕缓冲区矩形的左上角和右下角坐标。该指针可以为NULL。 dwDestinationOrigin 它以字符为单位指定lpScrollRectangle内容新位置的左上角。 lpFill 指向CHAR_INFO结构的指针,该结构指定在填充lpScrollRectangle和lpClipRectangle交集中的单元格时使用的字符和颜色属性,这些属性由于移动而保留为空。 返回值: 如果函数成功,则返回值为非零值。 如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。官方参考手册: https://docs.microsoft.com/en-us/windows/console/char-info-str
参考代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #include <Windows.h> #include <conio.h> int main() { //定义句柄变量 HANDLE hOut = NULL; //定义窗口信息变量 CONSOLE_SCREEN_BUFFER_INFO screenInfo; //定义移动区域 SMALL_RECT scroll; //移动位置 COORD pos = {8, 8}; //定义填充字符 CHAR_INFO chFill; //获取标准输出句柄 hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获取窗口信息 GetConsoleScreenBufferInfo(hOut, &screenInfo); chFill.Char.AsciiChar = ' '; chFill.Attributes = screenInfo.wAttributes; //输出字符串 printf("AAAAAAAAAAAAAAAAAAAAAAAAA\n"); printf("BBBBBBBBBBBBBBBBBBBBBBBBB\n"); printf("CCCCCCCCCCCCCCCCCCCCCCCCC\n"); printf("DDDDDDDDDDDDDDDDDDDDDDDDD\n"); //设置移动的区域 scroll.Left = 2; scroll.Top = 2; scroll.Right = 20; scroll.Bottom = 4; //设置文本移动 ScrollConsoleScreenBuffer(hOut, &scroll, NULL, pos, &chFill); getchar(); //关闭句柄 CloseHandle(hOut); system("pause"); return 0; }执行结果
参考网址: https://blog.csdn.net/JZQT_T/article/details/30602349