1在控制台中,完成了一个又一个程序。渐渐发现控制台不方便了。控制台貌似只能,从上到下,从左到右的进行输出。如果进行页面设计就会发现,想在光标所处位置的上方添加一些内容,该怎么办呢?
2.解决方案能否解决这类问题呢?
直接添加如下的自定义函数。然后再需要光标移动时,直接调用就可以实现光标的移动。
void goto_xy(int x, int y)//定位光标位置到指定坐标
{ HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = { x,y };
SetConsoleCursorPosition(hOut, pos);}
ps 1:添加这个自定义函数,必须要声明Windows.h的头文件
ps 2:使用时把它当做一个自定义函数,可以直接调用,传入的参数为相应的坐标
ps 3:使用这个函数时,不会清除屏幕中相关的内容
ps 4:光标移动后,再次输入时,如果原来位置有文字,会被覆盖掉
3.浅析光标移动函数的原理a.句柄(HANDLE)在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。
句柄指的是一个对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。在示例程序中HANDLE就是句柄数据类型。可以把对象的句柄赋给它。
b.API函数操作系统除了协调应用程序的执行、内存分配、系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数)。这些服务可以帮助应用程序达到开启视窗、描绘图形、使用周边设备的目的,由于这些函数服务的对象是应用程序(Application),所以称之为Application Programming Interface,简称API函数。
Ps :日常使用API的几率很小,所以API不用系统的去学,在需要的时候去查API帮助就足够了。->在示例程序中GetStdHandle()就是一个API函数。 它的作用是从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄 这里的句柄也可以理解为指光标停留位置的信息。
值含义STD_INPUT_HANDLE标准输入的句柄STD_OUTPUT_HANDLE标准输出的句柄STD_ERROR_HANDLE标准错误的句柄GetStdHandle()的几种参数c.COORDCOORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。typedef struct _COORD{ SHORT X; SHORT Y; } COORD;COORD是一个结构体,表示一个坐标。
定义包含在Windows.h的头文件里。d.SetConsoleCursorPosition()SetConsoleCursorPosition是一个实现光标的位置控制的计算机函数。它的两个参数为(光标句柄,COORD的结构体) 作用是将光标句柄,移动到COORD指向的位置。
转载于大佬konghouy的文章