文章目录
一、Win32API
Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application),所以便称之为ApplicationProgrammingInterface,简称API函数。WIN32API也就是MicrosoftWindows32位平台的应⽤程序编程接⼝。
二、控制台程序
1、控制台窗⼝的⼤⼩
平常我们运⾏起来的⿊框程序其实就是控制台程序我们可以使⽤cmd命令来设置控制台窗⼝的⻓宽:设置控制台窗⼝的⼤⼩,30⾏,100列。
1. mode con cols=100 lines=30
控制台窗口大小我们需要用到mode命令
这样我们就可以在编程的过程中去在修改窗口大小。
2、控制台窗⼝的名字
除了可以设置控制台窗口大的大小,还可以设置控制台窗口的名字
控制台窗口大小我们需要用到title命令
1. title 名字
3、system函数
这些能在控制台窗⼝执⾏的命令,也可以调⽤C语⾔函数system来执⾏。
system函数是一个执行系统命令的函数。调用命令处理器以执行命令。如果命令为空指针,则该函数仅检查命令处理器是否可通过该函数使用,而不调用任何命令。调用命令的效果取决于系统和库实现,并可能导致程序行为不规范或终止
三、控制台屏幕上的设置
1、COORD
COORD是WindowsAPI中定义的⼀个结构体,表⽰⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系(0,0) 的原点位于缓冲区的顶部左侧单元格
COORD类型的声明:
1. typedef struct _COORD {
2. SHORT X;
3. SHORT Y;
4. } COORD, *PCOORD;
给坐标赋值:
1. COORD pos = { 10, 15 };
2、 GetStdHandle
GetStdHandle是⼀个WindowsAPI函数。它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。
1. HANDLE GetStdHandle(DWORD nStdHandle);
GetStdHandle的参数:标准设备
实例:
1. HANDLE hOutput = NULL;
2. hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//标准输出设备
3. hOutput = GetStdHandle(STD_INPUT_HANDLE);//标准输入设备
4. hOutput = GetStdHandle(STD_ERROR_HANDLE);//标准错误设备
3、CONSOLE_CURSOR_INFO
CONSOLE_CURSOR_INFO这个结构体,包含有关控制台光标的信息
1. typedef struct _CONSOLE_CURSOR_INFO {
2. DWORD dwSize;
3. BOOL bVisible;
4. } CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
- dwSize,由光标填充的字符单元格的百分⽐。此值介于1到100之间。光标外观会变化,范围从完全填充单元格到单元底部的⽔平线条。
1. CursorInfo.dwSize = 25
- bVisible,游标的可⻅性。如果光标可⻅,则此成员为TRUE。
1. CursorInfo.bVisible = false; //隐藏控制台光标
4、 GetConsoleCursorInfo
检索有关指定控制台屏幕缓冲区的光标⼤⼩和可⻅性的信息
1. BOOL WINAPI GetConsoleCursorInfo(
2. HANDLE
3. hConsoleOutput,
4. PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
5. );
参数:
- hConsoleOutput [in]
控制台屏幕缓冲区的句柄。 该句柄必须具有 GENERIC_READ 访问权限。 - lpConsoleCursorInfo [out]
指向 CONSOLE_CURSOR_INFO 结构的指针,该结构接收有关控制台游标的信息。
GetConsoleCursorInfo可以将获取的句柄的光标信息放在 CONSOLE_CURSOR_INFO结构体中。
5、SetConsoleCursorInfo
设置指定控制台屏幕缓冲区的光标的⼤⼩和可⻅性。
1. BOOL WINAPI SetConsoleCursorInfo(
2. HANDLE hConsoleOutput,
3. const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
4. );
参数:
- hConsoleOutput [in]
控制台屏幕缓冲区的句柄。 该句柄必须具有 GENERIC_READ 访问权限。 - lpConsoleCursorInfo [out]
指向 CONSOLE_CURSOR_INFO 结构的指针,该结构接收有关控制台游标的信息。
6、SetConsoleCursorPosition
设置指定控制台屏幕缓冲区中的光标位置,我们将想要设置的坐标信息放在COORD类型的pos中,调⽤SetConsoleCursorPosition函数将光标位置设置到指定的位置。
1. BOOL WINAPI SetConsoleCursorPosition(
2. HANDLE hConsoleOutput,
3. COORD pos
4. );
7、GetAsyncKeyState
获取按键情况,GetAsyncKeyState的函数原型如下:
1. SHORT GetAsyncKeyState(
2. int vKey
3. )
将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。
GetAsyncKeyStat 的返回值是short类型,在上⼀次调用GetAsyncKeyState函数后,如果返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,说明按键的状态是抬起;如果最低位被置为1则说明,该按键被按过,否则为0。
如果我们要判断⼀个键是否被按过,可以检测GetAsyncKeyState返回值的最低值是否为1
1. #define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )
虚拟键码:https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes