【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区
00. 目錄
文章目錄
- 00. 目錄
- 01. COORD結(jié)構(gòu)體
- 02. SMALL_RECT結(jié)構(gòu)
- 03. CONSOLE_SCREEN_BUFFER_INFO結(jié)構(gòu)體
- 04. GetConsoleScreenBufferInfo函數(shù)
- 05. FillConsoleOutputCharacter 函數(shù)
- 06. 獲取窗口信息和填充程序
01. COORD結(jié)構(gòu)體
定義控制臺屏幕緩沖區(qū)中字符單元格的坐標。坐標系(0,0)的原點位于緩沖區(qū)的左上角。
類型聲明
typedef struct _COORD {SHORT X;SHORT Y; } COORD, *PCOORD;說明:
x: 水平坐標或列值。單位取決于函數(shù)調(diào)用。
y: 垂直坐標或行值。單位取決于函數(shù)調(diào)用。
02. SMALL_RECT結(jié)構(gòu)
定義矩形的左上角和右下角的坐標。
類型聲明
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結(jié)構(gòu)體
包含有關(guān)控制臺屏幕緩沖區(qū)的信息
類型聲明
typedef struct _CONSOLE_SCREEN_BUFFER_INFO {COORD dwSize;COORD dwCursorPosition;WORD wAttributes;SMALL_RECT srWindow;COORD dwMaximumWindowSize; } CONSOLE_SCREEN_BUFFER_INFO;說明:
dwSize: 包含控制臺屏幕緩沖區(qū)的大小,以字符列和行為單位。
dwCursorPosition: 包含控制臺屏幕緩沖區(qū)中光標的列和行坐標。
wAttributes: 字符屬性
srWindow: 包含顯示窗口左上角和右下角的控制臺屏幕緩沖區(qū)坐標。
dwMaximumWindowSize: 它包含控制臺窗口的最大大小,在字符列和行中,給定當前屏幕緩沖區(qū)大小和字體以及屏幕大小。
04. GetConsoleScreenBufferInfo函數(shù)
獲取有關(guān)指定控制臺屏幕緩沖區(qū)的信息。
函數(shù)聲明:
BOOL WINAPI GetConsoleScreenBufferInfo(_In_ HANDLE hConsoleOutput,_Out_ PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo );功能:獲取有關(guān)指定控制臺屏幕緩沖區(qū)的信息。 參數(shù):hConsoleOutput:控制臺屏幕緩沖區(qū)的句柄。句柄必須具有GENERIC_READ訪問權(quán)限。lpConsoleScreenBufferInfo:指向CONSOLE_SCREEN_BUFFER_INFO結(jié)構(gòu)的指針,該結(jié)構(gòu)接收控制臺屏幕緩沖區(qū)信息。返回值:如果函數(shù)成功,則返回值為非零值。如果函數(shù)失敗,則返回值為零。要獲取擴展錯誤信息,請調(diào)用GetLastError。參考網(wǎng)址:https://docs.microsoft.com/en-us/windows/console/getconsolescreenbufferinfo
05. FillConsoleOutputCharacter 函數(shù)
從指定的坐標開始,將一個字符寫入控制臺屏幕緩沖區(qū)指定的次數(shù)。
函數(shù)聲明:
BOOL WINAPI FillConsoleOutputCharacter(_In_ HANDLE hConsoleOutput,_In_ TCHAR cCharacter,_In_ DWORD nLength,_In_ COORD dwWriteCoord,_Out_ LPDWORD lpNumberOfCharsWritten ); 參數(shù):hConsoleOutput 控制臺屏幕緩沖區(qū)的句柄。句柄必須具有GENERIC_WRITE訪問權(quán)限。cCharacter 要寫入控制臺屏幕緩沖區(qū)的字符。nLength 應(yīng)寫入字符的字符單元格數(shù)。dwWriteCoord 指定字符坐標到的字符是要被寫入的開始坐標。lpNumberOfCharsWritten 指向變量的指針,該變量接收實際寫入控制臺屏幕緩沖區(qū)的字符數(shù)。返回值:如果函數(shù)成功,則返回值為非零值。如果函數(shù)失敗,則返回值為零。要獲取擴展錯誤信息,請調(diào)用GetLastError。參考官方網(wǎng)址: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;//窗口信息結(jié)構(gòu)體CONSOLE_SCREEN_BUFFER_INFO screenInfo;//開始坐標COORD pos = {0, 0};//獲取標準輸出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//獲取窗口信息結(jié)構(gòu)體GetConsoleScreenBufferInfo(hOut, &screenInfo);//將整個緩沖區(qū)填充字符'B'效果FillConsoleOutputCharacter(hOut, 'B', screenInfo.dwSize.X * screenInfo.dwSize.Y, pos, NULL);//關(guān)閉句柄CloseHandle(hOut);system("pause");return 0; }執(zhí)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言】控制台窗口图形界面编程(一)句
- 下一篇: 【C语言】控制台窗口图形界面编程(三)窗