【C語言】控制台窗口圖形界面編程(二)窗口信息和填充緩沖區


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

執行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM