00. 目录
[TOC]
01. COORD结构体
定义控制台屏幕缓冲区中字符单元格的坐标。坐标系(0,0)的原点位于缓冲区的左上角。
类型声明
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
说明:
x: 水平坐标或列值。单位取决于函数调用。
y: 垂直坐标或行值。单位取决于函数调用。
02. SMALL_RECT结构
定义矩形的左上角和右下角的坐标。
类型声明
typedef struct _SMALL_RECT {
SHORT Left;
SHORT Top;
SHORT Right;
SHORT Bottom;
} SMALL_RECT;
说明:
Left: 矩形左上角的x坐标。
Top: 矩形左上角的y坐标。
Right: 矩形右下角的x坐标。
Bottom: 矩形右下角的y坐标。
03. CONSOLE_SCREEN_BUFFER_INFO结构体
包含有关控制台屏幕缓冲区的信息
类型声明
typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
COORD dwSize;
COORD dwCursorPosition;
WORD wAttributes;
SMALL_RECT srWindow;
COORD dwMaximumWindowSize;
} CONSOLE_SCREEN_BUFFER_INFO;
说明:
dwSize: 包含控制台屏幕缓冲区的大小,以字符列和行为单位。
dwCursorPosition: 包含控制台屏幕缓冲区中光标的列和行坐标。
wAttributes: 字符属性
srWindow: 包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标。
dwMaximumWindowSize: 它包含控制台窗口的最大大小,在字符列和行中,给定当前屏幕缓冲区大小和字体以及屏幕大小。
04. GetConsoleScreenBufferInfo函数
获取有关指定控制台屏幕缓冲区的信息。
函数声明:
BOOL WINAPI GetConsoleScreenBufferInfo(
_In_ HANDLE hConsoleOutput,
_Out_ PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
);
功能:
获取有关指定控制台屏幕缓冲区的信息。
参数:
hConsoleOutput:控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。
lpConsoleScreenBufferInfo:
指向CONSOLE_SCREEN_BUFFER_INFO结构的指针,该结构接收控制台屏幕缓冲区信息。
返回值:
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。
05. FillConsoleOutputCharacter 函数
从指定的坐标开始,将一个字符写入控制台屏幕缓冲区指定的次数。
函数声明:
BOOL WINAPI FillConsoleOutputCharacter(
_In_ HANDLE hConsoleOutput,
_In_ TCHAR cCharacter,
_In_ DWORD nLength,
_In_ COORD dwWriteCoord,
_Out_ LPDWORD lpNumberOfCharsWritten
);
参数:
hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_WRITE访问权限。
cCharacter 要写入控制台屏幕缓冲区的字符。
nLength 应写入字符的字符单元格数。
dwWriteCoord 指定字符坐标到的字符是要被写入的开始坐标。
lpNumberOfCharsWritten 指向变量的指针,该变量接收实际写入控制台屏幕缓冲区的字符数。
返回值:
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。
06. 获取窗口信息和填充程序
参考代码:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
int main()
{
//定义句柄类型的变量
HANDLE hOut = NULL;
//窗口信息结构体
CONSOLE_SCREEN_BUFFER_INFO screenInfo;
//开始坐标
COORD pos = {0, 0};
//获取标准输出句柄
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
//获取窗口信息结构体
GetConsoleScreenBufferInfo(hOut, &screenInfo);
//将整个缓冲区填充字符'B'效果
FillConsoleOutputCharacter(hOut, 'B', screenInfo.dwSize.X * screenInfo.dwSize.Y, pos, NULL);
//关闭句柄
CloseHandle(hOut);
system("pause");
return 0;
}
执行结果: