目录
一、什么是win32API
二、API基础函数介绍
2.1控制台基础命令
2.1.1标题修改
2.1.2长宽修改
2.1.3坐标
2.2GetStdHandle
2.3GetConsoleCursorInfo
2.4SetConsoleCursorInfo
2.5SetConsoleCursorPosition
2.6GetAsyncKeyState
三、API函数综合应用
3.1设置光标
3.2判断一个键是否被按下
3.2基于控制台的游戏-贪吃蛇
详见Microsoft官方解释:控制台函数 - Windows Console | Microsoft Learn
一、什么是win32API
Win32 API是一组用于开发Microsoft Windows操作系统上应用程序的应用程序接口(API)。这些API是基于32位版本的Windows操作系统(如Windows 95、Windows 98、Windows NT等)的,因此得名Win32。它提供了对操作系统的底层功能的访问,包括窗口管理、图形设备接口、输入输出、文件系统等。通过Win32 API,开发人员可以编写能够与操作系统交互并利用其功能的应用程序,从简单的窗口应用程序到复杂的系统工具和游戏等各种类型的应用都可以使用Win32 API来开发。
二、API基础函数介绍
2.1控制台基础命令
2.1.1标题修改
title 自定义标题
2.1.2长宽修改
mode con cols=100 lines=30
2.1.3坐标
COORD 是Windows API中定义的⼀个结构体,表示⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系的原点位于缓冲区的顶部左侧单元格。
typedef struct _COORD { SHORT X; SHORT Y; } COORD, *PCOORD;
2.2GetStdHandle
HANDLE GetStdHandle(DWORD nStdHandle);
- 作用:GetStdHandle是⼀个Windows API函数。它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。
- 参数:
2.3GetConsoleCursorInfo
BOOL WINAPI GetConsoleCursorInfo( HANDLE hConsoleOutput, PCONSOLE_CURSOR_INFO lpConsoleCursorInfo );
- 作用:检索有关指定控制台屏幕缓冲区的光标大小和可⻅性的信息
- 参数:
a.操作的句柄
b.PCONSOLE_CURSOR_INFO 是指向 CONSOLE_CURSOR_INFO 结构的指针,该结构体接收有关主机光标的信息。typedef struct _CONSOLE_CURSOR_INFO { DWORD dwSize; BOOL bVisible; } CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO; • dwSize:由光标填充的字符单元格的百分⽐。 此值介于1到100之间。 光标外观会变化,范围从完全填充单元格到单元底部的⽔平线条。 • bVisible:游标的可⻅性。 如果光标可⻅,则此成员为 TRUE。
2.4SetConsoleCursorInfo
BOOL WINAPI SetConsoleCursorInfo( HANDLE hConsoleOutput, const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo );
- 作用:设置指定控制台屏幕缓冲区的光标的大小和可见性。
- 参数:同2.3解释
2.5SetConsoleCursorPosition
BOOL WINAPI SetConsoleCursorPosition( HANDLE hConsoleOutput, COORD pos );
- 作用:
- 参数:
a. 句柄
b. 指向坐标的结构体
2.6GetAsyncKeyState
SHORT GetAsyncKeyState( int vKey );
- 作用:将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。
- 返回值:如果返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,说明按键的状态是抬起;如果最低位被置为1则说明该按键被按过,否则为0。
- 参数详见:虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn
三、API函数综合应用
3.1设置光标
void SetPos(short x, short y)
{
COORD pos = { x, y };
HANDLE hOutput = NULL;
// 获取标准输出的句柄
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
// 设置标准输出设备上光标的位置为pos
SetConsoleCursorPosition(hOutput, pos);
}
3.2判断一个键是否被按下
按下返回1,没有返回0
//函数写法
void Key_Press_Check()
{
if((GetAsyncKeyState(VK) & 0x1)==1)
{
return 1;
}
else
{
return 0;
}
}
//宏定义写法
#define KEY_PRESS_CHECK(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )
3.2基于控制台的游戏-贪吃蛇
详见博主另一篇博客:http://t.csdnimg.cn/9ULjS