00. 目录

文章目录

  • 00. 目录
  • 01. FillConsoleOutputAttribute函数
  • 02. FillConsoleOutputCharacter函数
  • 03. WriteConsoleOutputCharacter函数
  • 04. 综合实例

01. FillConsoleOutputAttribute函数

设置指定数量的字符单元格的字符属性,从屏幕缓冲区中的指定坐标开始。

函数声明:

设置指定数量的字符单元格的字符属性BOOL WINAPI FillConsoleOutputAttribute(_In_  HANDLE  hConsoleOutput,_In_  WORD    wAttribute,_In_  DWORD   nLength,_In_  COORD   dwWriteCoord,_Out_ LPDWORD lpNumberOfAttrsWritten
);
功能:设置指定数量的字符单元格的字符属性
参数:hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_WRITE访问权限。wAttribute 写入控制台屏幕缓冲区时要使用的属性。nLength 要设置为指定颜色属性的字符单元格数。dwWriteCoord 指定字符坐标的开始位置lpNumberOfAttrsWritten 指向变量的指针,该变量接收实际设置了属性的字符单元格数。返回值:如果函数成功,则返回值为非零值。如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。

参考程序:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>#include <Windows.h>#define N 255int main()
{int i = 0;int len = 0;char *str = "神马程序员";//定义句柄类型的变量HANDLE hOut = NULL;//窗口信息结构体CONSOLE_SCREEN_BUFFER_INFO screenInfo;//开始位置COORD posShadow;//获取标准输出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取窗口信息结构体GetConsoleScreenBufferInfo(hOut, &screenInfo);//长度len = strlen(str) + 1;posShadow.X = 8;posShadow.Y = 8;//BACKGROUND_INTENSITY 灰色属性FillConsoleOutputAttribute(hOut, BACKGROUND_INTENSITY, len + 4, posShadow, NULL);getchar();//关闭句柄CloseHandle(hOut);system("pause");return 0;
}

执行效果

第8行第8列开始显示 长度为len + 4 属性为灰色

官方参考手册:https://docs.microsoft.com/en-us/windows/console/fillconsoleoutputattribute

02. 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。

参考程序:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>#include <Windows.h>#define N 255int main()
{int i = 0;int len = 0;char *str = "神马程序员";//定义句柄类型的变量HANDLE hOut = NULL;//窗口信息结构体CONSOLE_SCREEN_BUFFER_INFO screenInfo;//开始位置COORD posShadow;//获取标准输出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取窗口信息结构体GetConsoleScreenBufferInfo(hOut, &screenInfo);//开始位置 COORD pos = {0, 0};//填充指定数字的字符FillConsoleOutputCharacter(hOut, 'B', screenInfo.dwSize.X * 4, pos, NULL);getchar();//关闭句柄CloseHandle(hOut);system("pause");return 0;
}

执行结果:

填充四行

官方参考手册: https://docs.microsoft.com/en-us/windows/console/fillconsoleoutputcharacter

03. WriteConsoleOutputCharacter函数

从指定位置开始,将多个字符复制到控制台屏幕缓冲区的连续单元格。

函数声明:

BOOL WINAPI WriteConsoleOutputCharacter(_In_  HANDLE  hConsoleOutput,_In_  LPCTSTR lpCharacter,_In_  DWORD   nLength,_In_  COORD   dwWriteCoord,_Out_ LPDWORD lpNumberOfCharsWritten
);功能:从指定位置开始,将多个字符复制到控制台屏幕缓冲区的连续单元格。
参数:hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_WRITE访问权限。lpCharacter 要写入控制台屏幕缓冲区的字符串。nLength 要写入的字符数。dwWriteCoord 起始位置lpNumberOfCharsWritten 指向接收实际写入的字符数的变量的指针。返回值:如果函数成功,则返回值为非零值。如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。

参考程序:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>#include <Windows.h>#define N 255int main()
{int i = 0;int len = 0;char *str = "a";//定义句柄类型的变量HANDLE hOut = NULL;//窗口信息结构体CONSOLE_SCREEN_BUFFER_INFO screenInfo;//开始位置COORD posShadow;//获取标准输出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取窗口信息结构体GetConsoleScreenBufferInfo(hOut, &screenInfo);//开始位置 COORD pos = {0, 0};//填充指定数字的字符len = strlen(str);WriteConsoleOutputCharacter(hOut, str, len, pos, NULL);getchar();//关闭句柄CloseHandle(hOut);system("pause");return 0;
}

执行结果:

官方参考手册: https://docs.microsoft.com/en-us/windows/console/writeconsoleoutputcharacter

04. 综合实例

参考程序:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>#include <Windows.h>
#include <conio.h>int main()
{//定义输出信息char *str = "Hello World!";     int i;int len = strlen(str);//阴影属性WORD shadow = BACKGROUND_INTENSITY;     //文本属性WORD text = BACKGROUND_GREEN | BACKGROUND_INTENSITY; //获得标准输出设备句柄HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义窗口缓冲区信息结构体CONSOLE_SCREEN_BUFFER_INFO screenInfo; //获得窗口缓冲区信息GetConsoleScreenBufferInfo(hOut, &screenInfo); //定义一个文本框输出区域SMALL_RECT rc;      //定义文本框的起始坐标COORD posText;      //定义阴影框的起始坐标COORD posShadow;  //确定区域的边界rc.Top = 8;     //上边界rc.Bottom = rc.Top + 4;     //下边界rc.Left = (screenInfo.dwSize.X - len) / 2 - 2;    //左边界,为了让输出的字符串居中rc.Right = rc.Left + len + 4;   //右边界//确定文本框起始坐标posText.X = rc.Left;posText.Y = rc.Top;//确定阴影框的起始坐标posShadow.X = posText.X + 1;posShadow.Y = posText.Y + 1;for (i = 0; i < 5; ++i)     //先输出阴影框{FillConsoleOutputAttribute(hOut, shadow, len + 4, posShadow, NULL);posShadow.Y++;}for (i = 0; i < 5; ++i)     //在输出文本框,其中与阴影框重合的部分会被覆盖掉{FillConsoleOutputAttribute(hOut, text, len + 4, posText, NULL);posText.Y++;}//设置文本输出处的坐标posText.X = rc.Left + 2;posText.Y = rc.Top + 2;WriteConsoleOutputCharacter(hOut, str, len, posText, NULL);   //输出字符串getchar();SetConsoleTextAttribute(hOut, screenInfo.wAttributes);   // 恢复原来的属性CloseHandle(hOut);system("pause");return 0;
}

【C语言】控制台窗口图形界面编程(四):文本输出相关推荐

  1. 如何打开电脑c语言窗口,C语言控制台窗口图形界面编程(五). -电脑资料

    控制文本的移动是控制台窗口界面编程的一个很重要的功能,有了这个功能我们可以实现界面的滚动, BOOL ScrollConsoleScreenBuffer(      //文本移动函数 HANDLE h ...

  2. C语言控制台窗口图形界面编程

    一:设置句柄与窗口信息 在Windows操作系统下用C语言编写控制台的窗口界面首先要获取当前标准输入和标准输出设备的句柄.通过调用函数GetStdHandle可以获取当前标准输入以及输出设备的句柄.函 ...

  3. C语言控制台窗口图形界面编程(五).

    控制文本的移动是控制台窗口界面编程的一个很重要的功能,有了这个功能我们可以实现界面的滚动.下面我们介绍一个控制文本移动的函数,如下: BOOL ScrollConsoleScreenBuffer(   ...

  4. C语言控制台窗口图形界面编程(七):键盘事件

    输入事件中的键盘事件通常有字符事件和按键事件,这些事件的附带信息构成了键盘输入的信息,而想要读取这些信息,是要通过API函数ReadConsoleInput来获取的,函数原型如下: 1 BOOL Re ...

  5. 【C语言】控制台窗口图形界面编程(一)句柄和文本属性

    00. 目录 文章目录 00. 目录 01. 句柄 02. GetStdHandle函数 03. CloseHandle函数 04. SetConsoleTextAttribute函数 05. 十进制 ...

  6. 【C语言】控制台窗口图形界面编程(三)窗口相关设置

    00. 目录 文章目录 00. 目录 01. GetConsoleTitle函数 02. SetConsoleTitle函数 03. SetConsoleScreenBufferSize函数 04. ...

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

    00. 目录 文章目录 00. 目录 01. COORD结构体 02. SMALL_RECT结构 03. CONSOLE_SCREEN_BUFFER_INFO结构体 04. GetConsoleScr ...

  8. 【C语言】控制台窗口图形界面编程(七):鼠标事件

    00. 目录 文章目录 00. 目录 01. INPUT_RECORD结构 02. MOUSE_EVENT_RECORD结构 03. ReadConsoleInput函数 04. 示例程序 01. I ...

  9. 【C语言】控制台窗口图形界面编程(五):文本移动

    00. 目录 文章目录 00. 目录 01. CHAR_INFO结构 02. ScrollConsoleScreenBuffer函数 03. 程序示例 04. 官方参考程序 01. CHAR_INFO ...

最新文章

  1. redis 通过aof日志恢复_宕机了,宕机了,Redis数据丢了怎么办?
  2. android image 位移动画_深入理解Android之动画
  3. java 将图片转成二进制文件bin_java 问题:怎样把一个bin二进制图片文件用java代码打开?求解!...
  4. 中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
  5. CODEVS 3269 混合背包
  6. Pandas to_timedelta
  7. power bi示例文件_Power BI桌面问答数据交互示例
  8. pytorch:测试GPU是否可用
  9. Java读取mapinfo格式_mapInfo文件格式详解
  10. 设计模式之简单工厂,工厂方法和抽象工厂
  11. C# TCP通讯大族激光打标机
  12. 部署免安装版MySQL
  13. matlab 高精度无理数,如何从MatLab上的无理数生成近似分数?
  14. GPT-3根据输入词执行多句子生成
  15. 【JZOJ4178】【NOI2015模拟YDC】游戏(阶梯nim游戏)
  16. 二级公立医院绩效考核病案首页上报系统
  17. windows 命令行查找字符串 和 文件(find findstr for)
  18. 数据库系统概念 引言(一)
  19. Android自定义library上传到JitPack
  20. 使用Oracle透明网关(Gataway)操作SQL Server

热门文章

  1. Hadoop安装记录
  2. 荆门 php,荆门php培训
  3. mysql 复制表耗时_聊一下mysql的表复制
  4. 10-7 B2-1查找订单数最多的员工信息 (20 分)
  5. Linux nano编辑txt文件,Linux 文本编辑器 nano 的简单使用
  6. c语言向自定数组_C语言一维数组的定义和引用
  7. UML大战需求分析阅读笔记——02
  8. 【bzoj2238】Mst(树链剖分+线段树)
  9. 通过JAVA对HDFS进行操作管理插件
  10. Ubuntu下的第一个博客