00. 目录
目录
01. COORD结构体
定义控制台屏幕缓冲区中字符单元格的坐标。坐标系(0,0)的原点位于缓冲区的左上角。
类型声明
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
说明:
02. SMALL_RECT结构
定义矩形的左上角和右下角的坐标。
类型声明
typedef struct _SMALL_RECT {
SHORT Left;
SHORT Top;
SHORT Right;
SHORT Bottom;
} SMALL_RECT;
说明:
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;
说明:
04. GetConsoleScreenBufferInfo函数
获取有关指定控制台屏幕缓冲区的信息。
函数声明:
BOOL WINAPI GetConsoleScreenBufferInfo(
_In_ HANDLE hConsoleOutput,
_Out_ PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
);
功能:
获取有关指定控制台屏幕缓冲区的信息。
参数:
hConsoleOutput:控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。
lpConsoleScreenBufferInfo:
指向CONSOLE_SCREEN_BUFFER_INFO结构的指针,该结构接收控制台屏幕缓冲区信息。
返回值:
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。
参考网址:https://docs.microsoft.com/en-us/windows/console/getconsolescreenbufferinfo
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。
参考官方网址:https://docs.microsoft.com/en-us/windows/console/fillconsoleoutputcharacter
06. 获取窗口信息和填充程序
参考代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <Windows.h>
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;
}
执行结果: