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;
}

执行结果:

【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区-LMLPHP

05-20 15:28