控制台在指定位置画矩形,写字符串,画直线
来源:互联网 发布:守望先锋先锋大神数据 编辑:程序博客网 时间:2024/06/06 07:15
如何在控制台指定位指写字符串,画矩形,画直线?
一效果展示:
二代码
#include <stdio.h>#include <windows.h>#include<string>using namespace std;/**function: 将字符输出到缓冲区@paramch: 要输入的字符posLine : 字符所在行的位置posColumn: 字符所在列的位置charInfoAarray:缓冲区数组的内容**/void WriteCharToBuffer(CHAR_INFO ch, int posLine, int posColumn, CHAR_INFO * charInfoAarray){ charInfoAarray[posLine * 80 + posColumn] = ch;}/***function:将缓冲区的字符输出到控制台@paramstartPosRow:显示区域起始点的行号startPosColumn:显示区域起始点的列号height:显示区域高width:显示区域宽charInfoAarray:缓冲区数组的内容***/void OutPutToConsole(int startPosRow, int startPosColumn, int height, int width, CHAR_INFO * charInfoAarray){ HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwBufferSize = { 80, 25 };//固定值(控制台窗口固定的属性值) COORD dwBufferCoord = { startPosColumn, startPosRow };//缓冲区左上角的起始位置 SMALL_RECT rect = { startPosColumn, startPosRow, startPosColumn + width-1, startPosRow + height-1 };//显示多大的缓冲区: WriteConsoleOutput(hConsoleOutput, charInfoAarray, dwBufferSize, dwBufferCoord, &rect);}/**function :在控制台输出文本@param text:要输出的文本 row:输出文本的行数 column:输出文本的列数 startPosRow: 第一个字符所在行数 startPosColumn: 第一个字符所在列数 bgColor: 背景色 fgColor;前景色**/void drawText(string text, int row, int column, int startPosRow, int startPosColumn, int bgColor, int fgColor){ int i = 0; CHAR_INFO CharInfo; CharInfo.Attributes = bgColor | fgColor; CHAR_INFO charInfoArray[80 * 25]; for (i = 0; i < text.length(); i++) { CharInfo.Char.AsciiChar = text[i]; WriteCharToBuffer(CharInfo, startPosRow, startPosColumn + i, charInfoArray); } OutPutToConsole(startPosRow, startPosColumn, row, column, charInfoArray);}/**function 画矩形@param height:矩形的高 width:矩形的宽 startPosRow:矩形左上角纵坐标的位置 startPosColumn:矩形左上角横坐标的位置 bgColor:背景色 fgColor:前景色**/void drawRect(int height , int width , int leftPosY , int leftPosX ,int bgColor , int fgColor){ int i = 0 ,j = 0; CHAR_INFO CharInfo; CharInfo.Attributes = bgColor | fgColor; CHAR_INFO charInfoAarray[80 * 25]; for (i = leftPosY; i < leftPosY + height; i++) { for (j = leftPosX; j < leftPosX + width; j++) { CharInfo.Char.AsciiChar = ' '; WriteCharToBuffer(CharInfo, i, j , charInfoAarray); } } OutPutToConsole(leftPosY, leftPosX, height, width, charInfoAarray);}/**function:画一条线@param leftTopPosY:直线起始点的纵坐标 leftTopPosX:直线起始点的横坐标 width: 直线的长度 LineNum 直线的条数 bgColor 直线的背景色 fgColor 直线的颜色**/void drawLine(int leftTopPosY, int leftTopPosX, int width, int LineNum, int bgColor, int fgColor){ CHAR_INFO charInfo; CHAR_INFO charInfoArray[80 * 25]; int Row = 0; int Column = 0; charInfo.Attributes = bgColor | fgColor; charInfo.Char.AsciiChar = '-'; for (Row = leftTopPosY; Row < leftTopPosY + LineNum; Row++) { for (Column = leftTopPosX; Column < leftTopPosX + width; Column++) { charInfoArray[80 * Row + Column] = charInfo; } } OutPutToConsole(leftTopPosY, leftTopPosX, LineNum, width, charInfoArray);}void main(){ string str = "USERNAME"; drawText(str, 1, 8, 12, 35, FOREGROUND_RED, BACKGROUND_GREEN);//写一个字符串 drawRect(3, 8, 14, 35, FOREGROUND_RED, BACKGROUND_GREEN);//画一个矩形框 drawLine(18, 35, 10, 2, FOREGROUND_RED, BACKGROUND_GREEN);//画两条直线 getchar();}
三:常见问题:
1 代码里定义的 CHAR_INFO charInfoArray[80 * 25] 是什么?
可以理解成控制台在内存中的映射(即在内存中的一个画布)。在内存中画好一次性输出到控制台.
0 0
- 控制台在指定位置画矩形,写字符串,画直线
- 在控制台指定位置输出
- 画直线,矩形
- c#PictureBox画直线 矩形
- 在指定位置输出字符串
- 在字符串指定位置插入字符串
- android在指定时间内匀速画一条直线
- 在LCD19264 中任意位置画一条直线,或者删除一条直线
- 控制台程序在指定位置中输出文本
- iOS画矩形、直线、文字的方法
- iOS画矩形、直线、文字的方法
- opencv画直线圆椭圆矩形
- YUV数据画矩形和直线
- [Cocoa]_[画直线、矩形、文字]
- 在指定的位置后插入字符串
- 汇编语言在屏幕指定位置输出字符串
- 【练习】面向对象系列(004)——在自定义窗口中画矩形、直线、椭圆
- 在字符串的任意位置插入另一指定字符串
- FanChat学习笔记(一)——MVP模式的应用
- Redis Sentinel机制与用法(一)
- Flask学习总结笔记(6) -- Flask-Moment本地化日期和时间
- SpringMVC上传、解析Excel
- UGUI对话框自适应
- 控制台在指定位置画矩形,写字符串,画直线
- java transient关键字
- 进程间通信方式有哪些?以及在什么情况下用什么通信方式?以及各自优缺点
- Android设计模式之策略模式
- C语言大总结
- TutorialsPoint NumPy 教程
- ubuntu中gcc、g++版本切换
- apt-get 安装失败的一个案例
- Cocos2d使用TexturePacker工具打包生成plist和pvr.ccz文件方法总结