控制台的设置

news2024/11/16 21:23:11

目录

win32 API  :

什么是API : 

控制台:

控制台与VS:

控制台的控制:

控制台窗口设置:

1、mode函数:

2、title 函数:

 在C语言中的实现:

控制台的坐标设置:

 COODR函数:

原型:

控制台的坐标图:

坐标赋值:

在C语言中的实现:

获取控制台的权限:

 GetStdHandle:

原型:

 在C语言中的实现:

获取控制台的光标信息和大小:

 GetConsoleCursorInfo:

原型:

CONSOLE_CURSOR_INFO: 

 CONSOLE_CURSOR_INFO 结构体:

字符单元格百分比:

设置控制台的光标大小和可见性: 

SetConsoleCursorInfo:

原型:

在C语言中的使用:

设置控制台的光标位置 :

SetConsoleCursorposition: 

 使用:

 效果:

 获取按键情况:

虚拟键盘: 

  GetAsyncKeyState:

原型:

用宏定义进行判断按键的按压情况:

 实例:



win32 API  :

Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为 Application ProgrammingInterface,简称 API函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。

什么是API : 

每一种操作系统在完成正常的操作系统该有的功能,如果文件管理、内存管理,等等还提供了一些接口(函数),这些函数提供给程序员,让成员自己调用,能够实现一些自己想要的功能。

而这些接口就是API

控制台:

控制台又名cmd程序,又叫终端。

控制台与VS:

我们在VS程序中,创建的空白项目,其实就是在控制台内部进行创建的。

控制台的控制:

控制台窗口设置:

1、mode函数:

功能:在控制台界面中我们使用mode函数对控制台的大小进行控制。

mode con cols=100 lines=30
  • 如上代码,cols代表列数,lines代表行数,意思是将控制台的窗口变为100列 30行的大小 

注意事项:在最新版的win11版本中,控制台的大小被刻意的设置成了  "按照windos 设置",所以无法通过我们输入的指令进行大小的修改。

所以我们要将控制台进行重新设置:

  •  进行保存后记得重新启动控制台!

效果如下:


2、title 函数:

功能:title是对控制台的名字进行设置。 

 title 贪吃蛇

 在C语言中的实现:

 在C语言中我们使用system()函数来控制控制台的大小设置和标题设置,记得写上<stdib.h>作为头文件。

#include <stdio.h>

int main()
{
 //设置控制台窗⼝的⻓宽:设置控制台窗⼝的⼤⼩,30⾏,100列

 system("mode con cols=100 lines=30");

 //设置cmd窗⼝名称

 system("title 贪吃蛇"); 

 return 0;
}

控制台的坐标设置:

 COODR函数:

介绍:COORD 是Windows API中定义的⼀个结构体,表⽰⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系 (0,0) 的原点位于缓冲区的顶部左侧单元格。

原型:
typedef struct _COORD 
{

 SHORT X;

 SHORT Y;

} COORD, *PCOORD;
控制台的坐标图:

  •  如图所示,这个和数学的坐标系有些不同,x越往右边越大而且是正数,越往下面越大,而且是正数。 
坐标赋值:
 COORD pos ={ 3 ,5 };
在C语言中的实现:
#include <stdio.h>

int main()
{
 COORD pos ={ 3,5 };
 return 0;
}

获取控制台的权限:

 GetStdHandle:

GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。

而控制台就是一个标准输出的设备。

原型:
HANDLE GetstdHandle(DWORD nStdHandle);
  • HANDLE是一种类型 
  •  如果要控制控制台内部的设置,我们就得取得控制台的权限。
  • 例如在控制台中的光标消失,或者在控制台中的某个地方出现字符,而GetStdHandle就是干这个的。
 在C语言中的实现:
#include <stdio.h>

int main()
{

 HANDLE  handle = NULL;

//获取标准输出的句柄(⽤来标识不同设备的数值)
 handle = GetStdHandle(STD_OUTPUT_HANDLE);

//handle是一种指针,HANDLE是一种类型专门针对GetStdHandle

 return 0;


}

获取控制台的光标信息和大小:

 GetConsoleCursorInfo:

功能:检索有关指定控制台屏幕缓冲区的光标⼤⼩和可⻅性的信息。

原型:
BOOL WINAPI GetConsoleCursorInfo(

 HANDLE hConsoleOutput,

 PCONSOLE_CURSOR_INFO lpConsoleCursorInfo

);
  • PCONSOLE_CURSOR_INFO 是指向 CONSOLE_CURSOR_INFO 结构的指针。
  • 而 CONSOLE_CURSOR_INFO 是一个结构体,内部存储控制台光标信息和大小。

CONSOLE_CURSOR_INFO: 

 CONSOLE_CURSOR_INFO 结构体:
typedef struct _CONSOLE_CURSOR_INFO 
{
 DWORD dwSize;

 BOOL bVisible;

} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
  •   *PCONSOLE_CURSOR_INFO 是将 struct   CONSOLE_CURSOR_INFO * 这个指针类型进行重命名后的名字,执行 CONSOLE_CURSOR_INFO 这个结构体。
  • dwSize,由光标填充的字符单元格的百分⽐。 此值介于1到100之间。 光标外观会变化,范围从完 全填充单元格到单元底部的⽔平线条。
  • bVisible,游标的可⻅性。 如果光标可⻅,则此成员为 TRUE。
  • 使光标不可见则为 :CursorInfo.bVisible = false; 
  • 因为要使用false  所以我们需要使用头文件 <bool.h>

注意:上面的代码将光标结构体进行了重命名 !

字符单元格百分比:

和光标相比,光标只占了字符单元格的百分之几 

设置控制台的光标大小和可见性: 

SetConsoleCursorInfo:

功能:设置指定控制台屏幕缓冲区的光标的大小和可见性. 

原型:
BOOL WINAPI SetConsoleCursorInfo(

 HANDLE hConsoleOutput,

 const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo

);

如以上代码,我们得知该函数有两个参数,一个是获取了控制台权限的变量,表示需要修改的控制台,另一个是光标信息结构体的变量指针 。

在C语言中的使用:
#include <stdio.h>
#include <bool.h>

int main()
{
 
 HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 
 //影藏光标操作
 CONSOLE_CURSOR_INFO CursorInfo;

 //获取控制台光标信息
 GetConsoleCursorInfo(hOutput, &CursorInfo);

//隐藏控制台光标
 CursorInfo.bVisible = false; 
 
 //设置控制台光标状态
 SetConsoleCursorInfo(hOutput, &CursorInfo);

 return 0;


}

只有写出了设置,才能将光标信息进行修改,在设置光标函数中,他的参数有两个,前一个是取得控制台权限的变量和光标的信息结构体地址,对了要先将光标进行修改哦!

设置控制台的光标位置 :

SetConsoleCursorposition: 

功能:设置指定控制台屏幕缓冲区中的光标位置,我们将想要设置的坐标信息放在COORD类型的pos中,调用SetConsoleCursorPosition函数将光标位置设置到指定的位置。 

 使用:
#include <stdio.h>
#include <bool.h>

int main()
{
 
 HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 
 COORD pos = { 5,20 };

 SetConsoleCursorPosition( hOutput ,pos);

 int ch = getchar();
 
 putchar(ch);
 

 return 0;


}
 效果:

 获取按键情况:

虚拟键盘: 

 在win32 api中键盘上的每一个键都是编了号的。

虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learnicon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes

  • 如上图所示,0x26等十六进制数字就是虚拟键盘的编号。 

  GetAsyncKeyState:

功能: 函数接收后按键的键盘编号后,进行返值,而返回的值是short类型,而我们可以通过它的返回值的16位比特位中的最高位和最低位进行判断,按键是按下还是刚刚按过,还是没有按。

原型:
SHORT GetAsyncKeystate(int vKey);
用宏定义进行判断按键的按压情况:
//PRESS_KET 来检测vk这虚拟键值对应的按健是否被按过
//使用&的方法,和三目运算符 如果和1&得出的结果是1 那么就输出1 表示按下了,反之表示没按下
//如果按过返回1,未按过返回0
#define PRESS_KET(vk) (GetAsyncKeyState(vk) & 0x1 ? 1:0)

 C语言 位操作符 & | ^ ~-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/2301_76445610/article/details/132133124?spm=1001.2014.3001.5501

 实例:
  • 别忘记头文件<windows.h> 
#include <stdio.h>
#include <windows.h>
int main()
{
	while (1)
	{
		if (KEY_PRESS(0x30))
		{
			printf("0\n");
		}
		else if (KEY_PRESS(0x31))
		{
			printf("1\n");
		}
		else if (KEY_PRESS(0x32))
		{
			printf("2\n");
		}
		else if (KEY_PRESS(0x33))
		{
			printf("3\n");
		}
		else if (KEY_PRESS(0x34))
		{
			printf("4\n");
		}
		else if (KEY_PRESS(0x35))
		{
			printf("5\n");
		}
		else if (KEY_PRESS(0x36))
		{
			printf("6\n");
		}
		else if (KEY_PRESS(0x37))
		{
			printf("7\n");
		}
		else if (KEY_PRESS(0x38))
		{
			printf("8\n");
		}
		else if (KEY_PRESS(0x39))
		{
			printf("9\n");
		}
	}
	return 0;
}

这段代码的意思就是,当我们按下数字键的时候,通过获取数字键状态的函数进行判断,如果我们按下了数字键,就会打印除相对应的数字 。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 之numpy 之随机生成数

文章目录 1. **生成均匀分布的随机浮点数**&#xff1a;2. **生成随机整数**&#xff1a;3. **生成标准正态分布随机数**&#xff1a;4. **生成正态分布随机数**&#xff1a;5. **生成均匀分布的随机浮点数**&#xff1a;6. **生成随机抽样**&#xff1a;7. **设置随机数种子**…

Linux下Samba服务安装及启用全攻略

Linux下Samba服务安装及启用全攻略 前言一、安装SSH Server二、安装Samba Server1.安装net-tool2.建立账号的samba3.windows通过Samba与linux共享文件4.使用远程工具登录Linux 总结 前言 提示&#xff1a;本文详解了在Linux系统下如何安装和启用Samba服务&#xff0c;涵盖了从…

商家收款码手续费太高了

在竞争激烈、各行各业都如此内卷的当下&#xff0c;商家需要不断寻求提高利润的方法。所谓开源节流&#xff0c;既要学会提高利润率&#xff0c;也要学会节省成本&#xff0c;毕竟钱是挣出来的&#xff0c;同时也是省出来的。作为一个经常使用收款工具的商家&#xff0c;很多人…

Ubuntu源码编译samba

概述 本人最近研究samba的源码&#xff0c;但是在源码编译的时候&#xff0c;本以为直接config,make,make install。没想到编译过程中碰到很多麻烦&#xff0c;主要是各种依赖问题。 基于此&#xff0c;本文把samba编译的详细过程记录下来&#xff0c;以供再次研究借鉴。 软件…

Javascript命令模式

Javascript命令模式 1 什么是命令模式2 命令模式的例子—菜单程序3 JavaScript 中的命令模式4 撤销命令5 宏命令 1 什么是命令模式 在一个餐厅中&#xff0c;当客人现场点餐或者打电话订餐时&#xff0c;老板会把客人的需求写在清单上&#xff0c;厨师会按照清单的顺序给客人炒…

qt 多语言版本 QLinguist使用方法

在使用qt开发一款软件时&#xff0c;可能需要考虑显示文本中英文等多语言版本。可以使用qt语言家的方式实现。 步骤&#xff1a; 1、代码中给控件设置文本时&#xff0c;记得带上QObject::tr() 2、工程pro文件中加入 TRANSLATIONS demo2_en.ts 3、Qt creator点击“工具”—“外…

C语言【文件】

目录 概念 文件名 文件的打开和关闭 fopen fclose 输入输出函数 fputc fgetc fputs fgets fprintf fscanf fwrite fread 三种流 scanf和sprintf 结构体转化 ​编辑 文件的随机读写 fseek ftell rewind 文本文件和二进制文件 文件读取结束的判定 文件缓冲…

【试题035】逻辑非!例题

1.题目&#xff1a;下列表达式值为1的是&#xff1f; A. 3 & 4 B. 2 >5 C. ! !8 D. 0 &#xff01; 0 2.分析&#xff1a; 关于A选项&#xff1a; 3的二进制是&#xff1a;0011 4的二进制是&#xff1a;0100 0011 & 0100 00000 关于B选项&#xff1a; …

双势阱模型

双势阱模型 原子钟 传统的原子钟利用氨分子 由于隧道效应&#xff0c;上顶点的氮原子可以贯穿三个氢原子形成的势垒&#xff0c;到达下顶点对体系注入微波能量后&#xff0c;氮原子在上下定点之间振荡&#xff0c;体系的能量在两个稳定态之间交替变换&#xff0c;其振荡频率决…

2023淘宝十一预售今天20点开启!有什么优惠活动我们来一起看一下!

2023双11预售玩法将于今天20点正式开启&#xff01;有神优惠活动和玩法攻略&#xff0c;我&#xff0c;们一起来看一下&#xff01; 今双十一预售有加购赢清空购物车大奖&#xff0c;攒幸运值领红包&#xff0c;限时抢免定金福利&#xff0c;做任务攒幸运值赢免定特权这几大活…

PS001:PS2020及GeographicImager6.2安装

引言&#xff1a;Geographic ImagerV6.2是一款专业的PS地理成像插件&#xff0c;通过安装这款插件可实现在PS中加载4G以上的.bigtiff格式影像并对其进行修改与保存。并且这款软件拥有投影信息修改、基于地理坐标进行影像裁切等多种功能。 一、插件介绍 Geographic ImagerV6.2是…

【Windows】Edge浏览器自动更新服务启用选禁用被拒绝访问的解决方案

Windows系统的服务窗口里&#xff0c;把一些服务的启动类型选择禁用有可能会提示拒绝访问&#xff0c;怎么弄呢&#xff0c;这里讲一讲怎样禁用这个服务。 举一个类似禁用服务的例子&#xff1a;怎样关闭Edge浏览器的自动更新服务&#xff0c; 关闭服务 已知&#xff0c;Win…

CesiumJS 中绘制大多边形

本文翻译自Cesium官方&#xff0c;有改动。 本文中提及到的“大多边形”就如下图所示。 在Cesium的早期版本和一些引擎中&#xff0c;我们绘制这种跨度比较大的多边形&#xff0c;经常会看到一些奇怪的冲突问题&#xff0c;如下图所示。 要渲染任何几何体&#xff0c;我们必…

makesense在线yolov5标注

文章目录 一、创建图片文件夹和label.txt二、在线标注数据 参考文章博主&#xff1a;风吹落叶花飘荡 一、创建图片文件夹和label.txt 创建一个放置图片的文件夹images&#xff0c;存放需要标注的图片&#xff08;图片最好重命名为1,2,3…避免后面混淆&#xff09; 创建label.t…

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain----《BadNets:识别机器学习模型供应链中的漏洞》 背景&#xff1a; 许多用户将训练过程外包给云计算&#xff0c;或者依赖于经过训练的模型&#xff0c;然后根据特定的任务对模型进行微调。这…

patient feature-based softmax embedding

方法 作者未提供可直接运行的代码

JAVA基础(JAVA SE)学习笔记(七)面向对象编程(进阶)

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第二阶段&#xff1a;Java面向对象编程 6.面向对象编程&#xff08;基础&#xff09; 7.面向对象编程&…

Autosar代码阅读和调试方法

一、前言 众所周知Autosar工程代码量非常庞大&#xff0c;而且有非常多的宏定义&#xff0c;代码可读性非常不友好。但是目前国内外很多OEM和Tire1都是基于Autosar系统进行项目开发的。在开发过程中&#xff0c;出现一些BUG时必须去阅读和调试代码。这就要求开发人员具备很强代…

JavaScript基础知识16——分支语句

哈喽&#xff0c;大家好&#xff0c;我是雷工。 今天学习JavaScript基础知识的分支语句&#xff0c;以下为学习笔记。 1、程序三大流程控制语句 ○写几句就从上往下执行几句&#xff0c;这种叫做顺序结构&#xff1b; ○有时要根据条件选择执行代码&#xff0c;这种叫分支结构…

深度学习 | Pytorch深度学习实践 (Chapter 10、11 CNN)

十、CNN 卷积神经网络 基础篇 首先引入 —— 二维卷积&#xff1a;卷积层保留原空间信息关键&#xff1a;判断输入输出的维度大小特征提取&#xff1a;卷积层、下采样分类器&#xff1a;全连接 引例&#xff1a;RGB图像&#xff08;栅格图像&#xff09; 首先&#xff0c;老师…