控制台刷新界面c语言程序设计教程课后答案,【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区...

00. 目录

[TOC]

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。

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。

06. 获取窗口信息和填充程序

参考代码:

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

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;

}

执行结果:

f6e2de068f16abeb355d5ee35eaeb8c1.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值