除了C语言中的一些知识之外,你还需要学会1.储存坐标 2.把光标移到指定位置 3.隐藏光标 4.打印宽字符 5. 获取按键情况( 都需要#include<windows.h>头文件 )
1.储存坐标
//可以在之后用来改变光标位置
在控制台上的显示屏是有坐标的。一个窄字符占一个格。从左向右为x轴,从上到下为y轴!!!y轴的数也都是正数。(坐标系的x轴的数是按照单字符来算的)
储存坐标需要COORD结构体变量
COORD pos={40,10};
2.把光标移到指定位置
SetConsoleCursorPosition( 句柄 , 坐标 ) 改变光标位置
//set设置,console控制台,cursor光标,position位置
什么是句柄?为了粗略了解它,我先提出一个现象。在你点开window命令提示符(或者打开其他进程的时候),可以一次性点开很多很多。那么他们储存的地肯定是不同的。(系统为每个进程在内存中分配一定的区域,用来存放各个句柄,)为了让程序知道我们是要操作哪一个命令提示符,就需要获得他的句柄(才可以让程序知道我要操作的是谁)。
句柄的作用:在Windows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
//用HANDLE类型的handle变量接收句柄
//GetStdHandle函数的返回类型是HANDLE,GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄
参数
GetStdHandle函数的参数可以是下列之一
参数 含义 STD_INPUT_HANDLE 标准输入句柄 STD_OUTPUT_HANDLE 标准输出句柄 STD_ERROR_HANDLE 标准错误句柄
void SetPos(int x, int y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出的句柄(标准输出-->显示屏)
COORD pos = {x,y};//储存坐标
SetConsoleCursorPosition(handle, pos);//设置光标位置
}//用一个函数封装起来
3.隐藏光标:
定义光标信息结构体变量 CONSOLE_CURSOR_INFO cursor info={0};
// typedef struct _CONSOLE_CURSOR_INFO
//{
// DWORD dwSize; // 光标百分比大小
// BOOL bVisible; // 是否可见,false代表光标不可见,需要引头文件#include<bool.h>
//} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;//了解CONSOLE_CURSOR_INFO结构体
获取控制台句柄
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
调用设置控制台光标信息函数
SetConsoleCursorInfo(handle,&cursor info);
//BOOL SetConsoleCursorInfo // 设置光标信息
// {
// HANDLE hConsoleOutput, // 句柄
// CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo // 光标信息
// };
修改光标信息:
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;//光标信息的变量
GetConsoleCursorInfo(handle, &CursorInfo);//获取光标信息
CursorInfo.bVisible = false;
SetConsoleCursorInfo(handle, &CursorInfo);//设置光标信息
4.打印宽字符:
什么是宽字符?最开始,ASCLL码值只是适用使用英语的国家,对于我们中国,汉字有10万多。所以一个汉字占2个字节。这种就是宽字符。
怎么打印宽字符?
先要本地化:
#include<locate.h>
setlocale(LC_ALL, "");
wprintf(L"%lc",L'中');
wprintf(L"%lc",L'国');
wprintf(L"%lc",L'□');
5.获取按键情况:
GetAsyncKeyState 获取按键情况的函数
将键盘上每一个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态(返回值是short类型)
最高位是1那说明按键的状态是按下,0代表键盘状态是抬起
最低位被置为1,说明按键被按过。否则为0#define KEY_PRESS(vk) ((GetAsyncKeyState(vk)&1)?1:0)//三目表达式,传vk变量&1,可以知道最后一位是1还是0