目录
- win32 API 的介绍
- 控制台程序
- COORD结构体
- GetStdHandle函数
- GetConsoleCursorInfo函数
- SetConsoleCursorInfo函数
- SetConsoleCursorInfo函数
- GetAsyncKeyState函数
win32 API 的介绍
WIN32API就是Microsoft
Windows32位平台的应⽤程序编程接⼝
win32 API 中有许多可以调用的函数
下面就为大家介绍一下这些函数
控制台程序
控制台成序就是我们电脑上的cmd命令
也是我们程序运行时的框框
我们可以调整控制台的大小和名字
这些功能要在system函数上实现
而system需要的头文件是stdlib.h
//system 函数可以来执行系统命令
ststem("mode con cols=10 line=20");
//调整控制台的列为10,行为20
system("title 贪吃蛇");
//将控制台的名字命名为贪吃蛇
COORD结构体
COORD表示一个字符在控制台上的坐标
需要的头文件:windows.h
typedef struct _COORD
{
SHORT X;//横坐标
SHORT Y;//纵坐标
}COORD,* PCOORD;
int main()
{
COORD pos = { 10,20 };
//表示pos坐标x是10,y是20
//COORD pos1 = { 2,3 };
}
GetStdHandle函数
GetStdHandle函数的返回值是HANDLE
参数:
标准输入设备:键盘
标准输出设备和标准错误设备:屏幕
HANDLE GetStdHandle(DWORD nStdHandle);
// HANDLE是void* 的指针变量
举个例子:
//获取标准输出设备的句柄
//句柄:可以理解为把手,抓手,用来标识不同设备的数值
//句柄用于操作控制台
HANDLE output = NULL;
output = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleCursorInfo函数
GetConsoleCurslrInfo的功能是控制光标大小和(光标的可见性)隐藏光标
获得光标的信息
参数1:句柄
参数2:从句柄中获取光标信息放入结构体指针(CONSOLE_CURSOR_INFO)中
返回值:是布尔类型,true真,false假
需要的头文件:stdbool.h
typedef struct _CONSOLE_CURSOR_INFO
{
DWORD dwSize;//光标所占百分比
BOOL bvisible;//光标的可见性,光标可见为true,不可见为false
}
SetConsoleCursorInfo函数
用于设定控制台中光标的大小和可见性
参数和返回值和GetConsoleCursorInfo相似
#include<stdbool.h>
int main()
{
//获取标准输出设备的句柄
HANDLE houtput = NULL;
houtput = GetStdHandle(STD_OUTPUT_HANDLE);
//标准输出设备: 屏幕
//标准输出设备: 键盘
//定义一个光标信息的结构体
CONSOLE_CURSOR_INFO curson_info = { 0 };
//获取和houtput句柄有关的控制台上的光标信息,存放在 curson_info中
GetConsoleCursorInfo(houtput,&curson_info);
//修改光标的占比
curson_info.dwSize = 100;
//把光标设置为不可见
//curson_info.bVisible = false;
//设置和houtput句柄相关的控制台上的光标信息
SetConsoleCursorInfo(houtput, &curson_info);
getchar();
return 0;
}
光表占比为100
设置光标为不可见
SetConsoleCursorInfo函数
用于设置光标的位置
BOOL WINAPI SetConsoleCursorPosition
(
HANDLE hConsoleOutput;//句柄
COORD pos;//光标的位置
);
int main()
{
//获取标准输出设备的句柄
HANDLE houtput = NULL;
houtput = GetStdHandle(STD_OUTPUT_HANDLE);
//光标的位置
COORD pos = { 10,20 };
//设置光标的位置
SetConsoleCursorPosition(houtput, pos);
printf("hehe\n");
getchar();
return 0;
}
也可以封装一个函数来实现设置坐标的位置
//可以封装一个函数,设置光标的位置
void set_pos(short x,short y)
{
//获取标准输出设备的句柄
HANDLE houtput = NULL;
houtput = GetStdHandle(STD_OUTPUT_HANDLE);
//光标的位置
COORD pos = {x,y};
//设置光标的位置
SetConsoleCursorPosition(houtput, pos);
}
int main()
{
int x = 0;
int y = 0;
scanf("%d %d",&x,&y);
set_pos(x, y);
printf("hehe\n");
getchar();
return 0;
}
GetAsyncKeyState函数
用于获取按键的情况
将键盘上的虚拟键的键值传给函数,通过返回值判断按键的状态
返回值为short类型,调用GetAsyncKeyState后,short中的16个比特位,如果最高位为1,说明按键的状态是按下,如果最高位是0,说明按键的状态是抬起
如果最低位是1,说明按键被按过,否则为0
我们要判断一个键是否被按过,要检测函数的返回值的最低位是否是1
虚拟键值:
SHORT GetAsyncKeyState
(
int vKey;//虚拟键的键值
);
#define PRESS_KEY(VK) (((GetAsyncKeyState(VK))&(1))?1:0)
//按过了是 1 比如: 0000000000000111 & 0000000000000001 = 1
//没按过是0与1 0 比如: 0000000000000000 & 0000000000000001 = 0
int main()
{
short vk = GetAsyncKeyState(0x35);
//0x35是按键5,按下5就是数字5
if ((vk & 1) == 1)
{
printf("按过了\n");
}
else if((vk&1) == 0)
{
printf("未按过\n");
}
return 0;
}
再举个例子:
#define KEY_PRESS(VK) (((GetAsyncKeyState(VK))&(1))?1:0)
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;
}
这里输入按键1,1会被吸收,然后去判断是否为真,如果为真,就打印1
按了1肯定为真,没按为假,什么也不显示