首页 > 编程语言 > 详细

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

时间:2019-05-25 11:29:38      阅读:149      评论:0      收藏:0      [点我收藏+]

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

执行结果:

技术分享图片

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

原文:https://www.cnblogs.com/szitcast/p/10921607.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!