win32 API 函数

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肯定为真,没按为假,什么也不显示
在这里插入图片描述

相关推荐

  1. win32 汇编调用C标准库函数

    2024-04-20 18:36:06       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 18:36:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 18:36:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 18:36:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 18:36:06       20 阅读

热门阅读

  1. Edge的使用心得与深度探索

    2024-04-20 18:36:06       17 阅读
  2. CPU执行过程

    2024-04-20 18:36:06       16 阅读
  3. Ansible离线安装

    2024-04-20 18:36:06       23 阅读
  4. Elasticsearch(1)

    2024-04-20 18:36:06       36 阅读
  5. eslint 规则

    2024-04-20 18:36:06       49 阅读
  6. ARM_day7:按键中断

    2024-04-20 18:36:06       20 阅读
  7. 常见分类算法

    2024-04-20 18:36:06       20 阅读
  8. QT写Windows按键输出(外挂)

    2024-04-20 18:36:06       15 阅读
  9. 【MySQL】MySQL锁(二)表锁与行锁测试

    2024-04-20 18:36:06       23 阅读
  10. windows下如何安装git

    2024-04-20 18:36:06       46 阅读
  11. mybatis映射postgres数据库的geometry类型

    2024-04-20 18:36:06       18 阅读