当前位置: 首页 > news >正文

【自制C/C++小项目JuLongEditor】使用Windows控制台API来制作一个简单的文本编辑器

2023年8月22日,周二下午

昨天花了一个下午和晚上来制作的,

实现了一些基本的功能,

但由于代码只有130行,所以存在很多不足之处


GitHub:GitHub - JuLongZhiLu/JuLongEditor: C/C++小项目,使用Windows控制台API来制作一个简单的文本编辑器,只有130行代码


#include <windows.h>
#include <conio.h>
using namespace std;//设置编辑器的能容纳的文本大小,最多10行80列
const int MAX_ROWS = 10;
const int MAX_COLS = 80;CHAR_INFO buffer[MAX_ROWS][MAX_COLS];//二维字符数组,用来构成文本
COORD cursorPos;//专门坐标位置的数据结构
CONSOLE_SCREEN_BUFFER_INFO csbi;//控制台屏幕缓冲区信息//初始化二维字符数组
void initBuffer() {for (int i = 0; i < MAX_ROWS; i++) {for (int j = 0; j < MAX_COLS; j++) {buffer[i][j].Char.AsciiChar = ' ';buffer[i][j].Attributes = FOREGROUND_BLUE;}}
}//初始化坐标数据结构
void initCursor() {cursorPos.X = 0;cursorPos.Y = 0;
}//把构成文本的二维数组打印到控制台
void drawBuffer(HANDLE console) {SMALL_RECT rect;rect.Top = 0;rect.Left = 0;rect.Bottom = MAX_ROWS - 1;rect.Right = MAX_COLS - 1;WriteConsoleOutputA(console, (CHAR_INFO*)buffer, { MAX_COLS, MAX_ROWS }, { 0, 0 }, &rect);
}//处理键盘按键
void ProcessKeys(int key, HANDLE console) {if (key == 0 || key == 224) {  //如果是方向键和删除键key = _getch();switch (key) {case 72: // 上if (cursorPos.Y != 0)cursorPos.Y--;SetConsoleCursorPosition(console, cursorPos);//移动光标到指定位置break;case 80: // 下cursorPos.Y++;SetConsoleCursorPosition(console, cursorPos);//移动光标到指定位置break;case 75: // 左if (cursorPos.X != 0)cursorPos.X--;if (cursorPos.Y != 0 && cursorPos.X == 0)cursorPos.Y--;SetConsoleCursorPosition(console, cursorPos);break;case 77: // 右if (cursorPos.X != MAX_COLS)//如果一行的字符数没超过最大列数,那么光标就右移一位cursorPos.X++;else{cursorPos.X = 0;//如果超过了,就换行cursorPos.Y++;}SetConsoleCursorPosition(console, cursorPos);break;case 83: //删除键buffer[cursorPos.Y][cursorPos.X - 1].Char.AsciiChar = ' ';buffer[cursorPos.Y][cursorPos.X - 1].Attributes = FOREGROUND_BLUE;if (cursorPos.X != 0)cursorPos.X--;if (cursorPos.Y != 0 && cursorPos.X == 0)cursorPos.Y--;SetConsoleCursorPosition(console, cursorPos);drawBuffer(console);break;}}else if (key == 13) {//如果是换行键cursorPos.X = 0;cursorPos.Y++;SetConsoleCursorPosition(console, cursorPos);	//在输出设备上定位光标}else if (key == 8) {  // 如果是回退键(Backspace键)buffer[cursorPos.Y][cursorPos.X - 1].Char.AsciiChar = ' ';buffer[cursorPos.Y][cursorPos.X - 1].Attributes = FOREGROUND_BLUE;if (cursorPos.X != 0)cursorPos.X--;if (cursorPos.Y != 0 && cursorPos.X == 0)cursorPos.Y--;SetConsoleCursorPosition(console, cursorPos);drawBuffer(console);}else {//如果是输入文本buffer[cursorPos.Y][cursorPos.X].Char.AsciiChar = (char)key;buffer[cursorPos.Y][cursorPos.X].Attributes = FOREGROUND_BLUE;drawBuffer(console);cursorPos.X++;SetConsoleCursorPosition(console, cursorPos);drawBuffer(console);}
}void input(HANDLE console) {while (true){GetConsoleScreenBufferInfo(console, &csbi);	//获取屏幕缓冲的光标位置,然后把当前光标位置赋给COORDcursorPos.X = csbi.dwCursorPosition.X;			//得到坐标x的值cursorPos.Y = csbi.dwCursorPosition.Y;			//y值if (_kbhit()) {int key = _getch();ProcessKeys(key, console);}}
}int main() {initBuffer();initCursor();HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);input(console);
}

相关文章:

【自制C/C++小项目JuLongEditor】使用Windows控制台API来制作一个简单的文本编辑器

2023年8月22日&#xff0c;周二下午 昨天花了一个下午和晚上来制作的&#xff0c; 实现了一些基本的功能&#xff0c; 但由于代码只有130行&#xff0c;所以存在很多不足之处 GitHub&#xff1a;GitHub - JuLongZhiLu/JuLongEditor: C/C小项目&#xff0c;使用Windows控制台…...

中国芯,寻找新赛道迫在眉睫

北京华兴万邦管理咨询有限公司 商瑞 陈皓 近期国内半导体行业的热点可以用两个“有点多”来描述&#xff0c;一个是中国芯群体中上市公司股价闪崩的有点多&#xff0c;另一个是行业和企业的活动有点多。前者说明了许多国内芯片设计企业&#xff08;fabless商业模式&#xff09;…...

C++ 好用的格式化库--fmt

背景 fmt 库是一个开源的 C 格式化库&#xff0c;它提供了一种简洁、安全和高效的方式来进行字符串格式化。该库的设计目标是提供与 Python 的字符串格式化语法类似的功能&#xff0c;同时保持 C 的类型安全性和性能。 下载与安装 官网下载 fmt 官网地址&#xff1a;https:…...

微信小程序教学系列(3)

微信小程序教学系列 第三章&#xff1a;小程序高级开发技巧 1. 小程序API的使用 小程序API简介 小程序API是小程序提供的一系列接口&#xff0c;用于实现各种功能和操作。通过调用小程序API&#xff0c;可以实现页面跳转、数据存储、网络请求等功能。 使用小程序API的步骤…...

ORB-SLAM系列算法演进

ORB-SLAM算法是特征点法的代表&#xff0c;当前最新发展的ORB-SLAM3已经将相机模型抽象化&#xff0c;适用范围非常广&#xff0c;虽然ORB-SLAM在算法上的创新并不是很丰富&#xff0c;但是它在工程上的创新确实让人耳目一新&#xff0c;也能更好的为AR、机器人的算法实现落地。…...

solidity0.8.0的应用案例11:透明代理合约

选择器冲突 智能合约中,函数选择器(selector)是函数签名的哈希的前4个字节。例如mint(address account)的选择器为bytes4(keccak256("mint(address)")),也就是0x6a627842. 由于函数选择器仅有4个字节,范围很小,因此两个不同的函数可能会有相同的选择器,例如…...

最新消息:谷歌将在Chromebook上运用UWB技术,无线通信更上一层

超宽带&#xff08;UWB&#xff09;技术是一种创新的短距离无线通信技术&#xff0c;具有高速数据传输和精确定位物体位置的优势。尽管该技术已经存在一段时间&#xff0c;但最近开始广泛应用于各种设备中。据最新报道&#xff0c;Pixel Watch 2可能会搭载UWB模块&#xff0c;这…...

php+echarts实现数据可视化实例3

效果 全部代码 <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" …...

ubuntu下安装Sphinx,编译pdf

安装WSL2&#xff1a; 以管理员身份打开PowerShellwsl --install 来安装其他 Linux 发行版wsl --list --verbose 查看安装在 Windows 计算机上的 Linux 发行版列表 安装sphinx&#xff1a; sudo apt-get updatesudo apt-get install python3-sphinxsudo apt-get install lat…...

vue2.x项目从0到1(七)之用户权限

此章节偏理论知识 对于小一点的项目 比如说角色都是平级的 那我们直接像之前 vue2.x项目从0到1&#xff08;二&#xff09;之后台管理侧边栏&#xff08;动态渲染路由以及高亮&#xff09;_vue动态渲染侧边栏_关忆北_的博客-CSDN博客这样渲染就行了 但是一旦项目大了 …...

上传镜像到阿里云的ACR

1、开通阿里云ACR 2、在ACR 中创建命名空间 3、本地安装docker 4、登录到 开通ACR&#xff0c;需要配置访问凭证 [rootmaster ~]# docker login --username***lb registry.cn-beijing.aliyuncs.com Password: 5、给镜像打标签 [rootmaster ~]# docker images REPOSITORY …...

ahooks.js:一款强大的React Hooks库及其API使用教程(五)

一、ahooks.js简介二、ahooks.js安装三、继续ahooks.js API的介绍与使用教程61. useEventTarget62. useExternal63. useFavicon64. useMutationObserver65. useLongPress66. useScroll67. useResponsive68. useFocusWithin69. useControllableValue70. useEventEmitter 一、aho…...

MySQL TCL 事务控制

文章目录 1.事务四大特性2.事务并发问题3.事务隔离级别4.隔离级别查看与设置5.动提交事务5.1 查看自动提交事务5.2 关闭或开启自动提交事务 6.事务执行的基本流程7.设置事务的保存点参考文献 说到事务控制&#xff0c;先说一下数据库的事务是什么以及 MySQL 中我们必知的知识点…...

【Ubuntu】从Graylog到Grafana Loki:构建更强大的网络设备管理和监控系统

在将Graylog部署到生产环境时&#xff0c;我们遇到了一些问题&#xff0c;其中最主要的是无法安装MongoDB并且无法随时重启机器去修改BIOS设置来修复问题 【WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! 】。…...

[JavaWeb]【八】web后端开发-Mybatis

目录 一 介绍 二 Mybatis的入门 2.1 快速入门 2.1.1 准备SpringBoot工程 2.1.2 创建数据库mybatis以及对应库表user 2.1.3 创建User实体类 2.1.4 配置application.properties数据库连接信息 2.1.5 编写sql语句&#xff08;注解方式&#xff09; 2.1.6 测试运行 2.1.7 配…...

Flink源码之Checkpoint执行流程

Checkpoint完整流程如上图所示&#xff1a; JobMaster的CheckpointCoordinator向所有SourceTask发送RPC触发一次CheckPointSourceTask向下游广播CheckpointBarrierSouceTask完成状态快照后向JobMaster发送快照结果非SouceTask在Barrier对齐后完成状态快照向JobMaster发送快照结…...

【工具使用】Git的使用

dev代表开发版 1. git clone 命令 通过 git add <name> 对文件进行跟踪&#xff0c;把<name>加入到暂存区 git commit -m XXXXXXX 提交修改并补充XXXXX作为注释 “暂存”状态&#xff1a;出现了一些修改&#xff0c;但是还没有提交 对于Java来说&#xff0c;.cl…...

无涯教程-PHP Installation on Windows NT/2000/XP with IIS函数

在Windows Server上运行IIS的PHP的安装比在Unix上简单得多,因为它涉及的是预编译的二进制文件而不是源代码。 如果您打算在Windows上安装PHP,那么这是先决条件列表- 运行中的PHP支持的Web服务器。一个正确安装的PHP支持的数据库,如MySQL或Oracle等。(如果您打算使用的话) PHP…...

EureKa快速入门

EureKa快速入门 远程调用的问题 多个服务有多个端口&#xff0c;这样的话服务有多个&#xff0c;硬编码不太适合 eureKa的作用 将service的所有服务的端口全部记录下来 想要的话 直接从注册中心查询对于所有服务 每隔一段时间需要想eureKa发送请求 保证服务还存活 动手实践 …...

Sectigo EV代码签名申请步骤

一、EV代码签名申请前提 1、单位成立时间不低于&#xff1a;3个月 2、单位工商及企查查可查 3、单位经营正常 4、注册地址真实存在&#xff0c;禁止使用集中注册地址 5、企查查登记电话和邮箱&#xff0c;确定查询结果的电话可以接听、邮箱可以接收邮件&#xff0c;如果信…...

生信学院|08月25日《SOLIDWORKS PDM帮助企业对设计数据版本的管理应用》

课程主题&#xff1a;SOLIDWORKS PDM帮助企业对设计数据版本的管理应用 课程时间&#xff1a;2023年08月25日 14:00-14:30 主讲人&#xff1a;车立洋 生信科技 PDM专家 1、图纸&文档的版本管理对于企业的重要性 2、SolidWorks PDM对图纸&文档版本的管理 3、SolidW…...

vue页面转pdf后分页时文字被横向割裂

效果 预期效果 //避免分页被截断async outPutPdfFn (id, title) {const _t this;const A4_WIDTH 592.28;const A4_HEIGHT 841.89;// dom的id。let target document.getElementById(pdf);let pageHeight target.scrollWidth / A4_WIDTH * A4_HEIGHT;// 获取分割dom&#xf…...

数据结构——队列(C语言)

需求&#xff1a;无 本篇文章将解决一下几个问题&#xff1a; 队列是什么&#xff1f;如何实现一个队列&#xff1f;什么场景下会用队列&#xff1f; 队列的概念&#xff1a; 队列&#xff1a;一种只允许一端进行插入数据操作&#xff0c;在另一端进行删除操作的特殊线性表。…...

WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换 资料收集

野火 ATGM332D简介 高性能、低功耗 GPS、北斗双模定位模块 STM32 GPS定位_为了维护世界和平_的博客-CSDN博客 秉火多功能调试助手上位机开源&#xff01;共六款软件&#xff0c;学到你吐... , - 电脑上位机 - 野火电子论坛 - Powered by Discuz! https://www.firebbs.cn/for…...

【面试题】前端面试复习6---性能优化

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 性能优化 一、性能指标 要在 Chrome 中查看性能指标&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Chrome 浏览器&#xff0c;并访问你想要测试…...

隧道HTTP具备的条件

作为一名专业的爬虫代理供应商&#xff0c;我们都知道使用代理是保证爬虫的高效性和稳定性的重要手段之一。而隧道代理则是近年来备受推崇的一种代理形式&#xff0c;它通过将请求通过隧道传输&#xff0c;可以有效地隐藏爬虫的真实IP地址&#xff0c;提高爬虫的反爬能力。 在…...

部署FTP服务(二)

目录 2.访问FTP服务 1.使用ftp命令行工具 2.使用浏览器 3.使用FileZilla Client 3.Serv-U 1.定义新域 2.创建用户 4. windowsserver搭建ftp服务器 一、FTP工具 二、Windows资源管理器 三、IE浏览器访问 2.访问FTP服务 下面在一台装有Windows10操作系统的计算机中&#…...

缓存的变更(JVM本地缓存->Redis分布式缓存)

在一次需求修改中&#xff0c;下游的服务附加提出了&#xff0c;针对某个业务数据缓存的生效时间的要求 原JVM设计方案&#xff1a; 采用jvm本地缓存机制&#xff0c;定时任务30秒刷新一次 现在redis方案&#xff1a; 因为很多地方使用了这个业务数据缓存&#xff0c;使用方…...

springMVC Unix 文件参数变更漏洞修复

错误信息如下&#xff1a; 解决方案&#xff1a; 原因&#xff1a;未对用户输入正确执行危险字符清理 未检查用户输入中是否包含“…”&#xff08;两个点&#xff09;字符串&#xff0c;比如 url 为 /login?action…/webapps/RTJEKSWTN26635&typerandomCode cookie为Coo…...

【LeetCode】494.目标和

题目 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添加 - &#x…...

安阳网站建设哪家好/策划是做什么的

在程序员的世界中&#xff0c;一切重复性的工作&#xff0c;都应该通过程序自动执行。 「自动化测试」就是一个最好的例子。 随着互联网应用开发周期越来越短&#xff0c;迭代速度越来越快&#xff0c;只会点点点&#xff0c;不懂开发的手工测试&#xff0c;已经无法满足如今的…...

网站改版 升级的目的是什么意思/搜索引擎优化是免费的吗

现在的服务器一般都是多核了&#xff0c;但是中断很多时候都是只用一个核&#xff0c;如果有些中断要求比较高&#xff0c;可以把它独立分配给一个cpu使用。查看irq资源cat /proc/interruptsCPU0 CPU1 CPU2 CPU30: 131 0 0 1914 IO-APIC-edge timer1: 0 0 0 2 IO-APIC-edge i80…...

大连网站流量优/58同城黄页推广

php导出excel 10万数据(此代码主要测试用)在工作当中要对一些基本信息和其他信息导出起初信息比较小无所谓。。。。但当信息超出65535的时候发现点问题了 超出了 而且 反应速度很慢实现思路&#xff1a;分页导出伪代码&#xff1a;1、获取总数据&#xff0c;并确定显示多少条数…...

手机网站模板使用方法/怎样能在百度上搜索到自己的店铺

今天是腊月二十七&#xff0c;给各位朋友拜个早年&#xff01;Python学习可以分为几个阶段&#xff0c;入门、进阶、应用。先说说入门需要哪些基本的知识储备。Python因为易于学习的特点&#xff0c;入门很简单&#xff0c;掌握基本的Python知识点&#xff0c;比如变量、数据结…...

wordpress静态链接设置完了404/网站排名软件利搜

背景最近有个初学Vue的朋友问我&#xff0c;为什么我的两层路由跳不起来了&#xff0c;直接输url也不行&#xff1f;信息不是很充足及看不到源码的我&#xff0c;当时是那个一脸懵逼啊&#xff0c;心想这肯定是代码的问题&#xff0c;跟层级无关。接着我继续追问...(省略)...大…...

网站建设灬金手指下拉/揭阳市seo上词外包

我现在的公司是自己和几个朋友创办的(大学生自主创业).人数不是很多&#xff0c;每个人负责一个版块.我们的经理本来开始也是专注技术的,后来因为公司的发展,他的经理基本上转到管理方面去了,因此在web技术方面就我孤单一个人了.现在觉得前途太迷茫了.本人是从学习asp开始的.然…...