用户:
萌新大佬查看:3 回复:4 评论:3 创建时间:2022-02-27T16:30:26
首先说明一下,只有在windows系统下才可以!
第一课
#include<winsows.h>
#include<conio.h>
首先引入这两个头文件+万能。
让后教大家写2个必用函数
1.
void gotoxy(int x,int y){
COORD pos={y,x};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
它可以让光标走向第x行y列。
原理:
WINBASEAPI WINBOOL WINAPI SetConsoleCursorPosition(HANDLE hConsoleOutput,COORD dwCursorPosition);
这是SetConsoleCursorPosition 原代码,第一个参数是哪个控制台(对的他还能控制其他控制台的光标),第二个是鼠标的位置。看一下COORD是什么:
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD,*PCOORD;
实际上就是把xy封装到一个结构体里而已
STD_OUTPUT_HANDLE就是指我们运行后弹出的控制台啦。
至于含多人不能理解的HANDLE类型
typedef void *HANDLE;
哈哈它实际上欸喵oid(真不知道windows.h的编辑者怎么想的)
第二个函数
void hide(){
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);
CursorInfo.bVisible = false;
SetConsoleCursorInfo(handle, &CursorInfo);
}
在main函数刚开始时运行,能使光标隐藏。
函数内第一行上个函数大家都看到了,那第二行的是啥意思呢?
typedef struct _CONSOLE_CURSOR_INFO {
DWORD dwSize;
WINBOOL bVisible;
} CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;
只不过是吧光标的两个参数封装在了一起,而第二个就是是否隐藏,至于WINBOOL是啥
typedef int WINBOOL;
啊他实际上就是Int
至于神秘的DWORD
typedef unsigned __LONG32 DWORD;
你可以理解它就是个超大整型
好了这节课就这么愉快地结束了
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
小彩蛋:
windows.h里面有很多奇葩的事情让我无法理解,举个常见的例子:
typedef unsigned __LONG32 DWORD;
typedef DWORD *PDWORD;
typedef DWORD *LPDWORD;
就是一个非常离谱的大无用事件
#include<winsows.h>
#include<conio.h>
这俩是导入头文件,实质就是把winsows.h和conio.h里的代码复制粘贴到此文件里,这样我们能够使用里面的代码
void gotoxy(int x,int y){
COORD pos={y,x};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
写一个无返回值的函数gotoxy,参数就是整型x,y
然后在里面写类型是COORD的对象pos的值为y,x(分别给结构体的两个成员变量赋值)
底下的函数可以自己查询,推测是设置控制台光标的位置
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD,*PCOORD;
新建一个结构体,结构体就是一系列成员变量的集合,变量可以是任意类型。typedef是类型名称替换,替换struct _COORD的名称为COORD和*PCOORD
点赞0
评论