00. 目錄
目錄
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。
參考網址: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;
}
執行結果: