控制台的设置

目录

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程序,又叫终端。

控制台的设置_第1张图片

控制台的设置_第2张图片

控制台与VS:

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

控制台的设置_第3张图片

控制台的控制:

控制台窗口设置:

1、mode函数:

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

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

控制台的设置_第4张图片

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

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

控制台的设置_第5张图片

控制台的设置_第6张图片

控制台的设置_第7张图片

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

效果如下:

控制台的设置_第8张图片
控制台的设置_第9张图片

2、title 函数:

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

 title 贪吃蛇

控制台的设置_第10张图片

控制台的设置_第11张图片

 在C语言中的实现:

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

#include 

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;
控制台的坐标图:

控制台的设置_第12张图片

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

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

获取控制台的权限:

 GetStdHandle:

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

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

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

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 是一个结构体,内部存储控制台光标信息和大小。

控制台的设置_第13张图片

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  所以我们需要使用头文件

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

字符单元格百分比:

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

控制台的设置_第14张图片

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

SetConsoleCursorInfo:

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

原型:
BOOL WINAPI SetConsoleCursorInfo(

 HANDLE hConsoleOutput,

 const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo

);

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

在C语言中的使用:
#include 
#include 

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 
#include 

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

 SetConsoleCursorPosition( hOutput ,pos);

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

 return 0;


}
 效果:

控制台的设置_第15张图片

 获取按键情况:

虚拟键盘: 

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

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

控制台的设置_第16张图片

控制台的设置_第17张图片

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

  GetAsyncKeyState:

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

控制台的设置_第18张图片

原型:
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

 实例:
  • 别忘记头文件 
#include 
#include 
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;
}

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


控制台的设置_第19张图片

你可能感兴趣的:(C语言,控制台,c语言,win,API,控制台,函数)