zoukankan      html  css  js  c++  java
  • 【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;
    }
    
    

    执行结果:

  • 相关阅读:
    小黄衫获奖感言
    原型设计
    20210326编程作业
    阅读任务
    准备工作
    cmd命令行批量修改文件名后缀
    【智能算法】模拟退火算法
    【智能算法】粒子群寻优算法
    【并行计算】基于OpenMP的并行编程
    Python科学计算——前期准备
  • 原文地址:https://www.cnblogs.com/szitcast/p/10921607.html
Copyright © 2011-2022 走看看