void gotoxy(int x,int y)//坐标定位
{
COORD loc;
loc.X = y;
loc.Y = x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);
}
https://msdn.microsoft.com/en-us/library/ms686025(VS.85).aspx.aspx "")
windows API帮你实现了光标的移动。
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
很明显这个结构可以用来记录坐标
GetStdHandle()函数获得标准输入输出的句柄,参数STD_OUTPUT_HANDLE是个宏,代表标准输出,可以看作显示器
SetConsoleCursorPosition(hout,coord); 看函数名称:设置控制台光标坐标,参数就是设备句柄,坐标,那么把标准输出的句柄传给函数,就可以把光标定位在对应的位置了(左上角位置是0,0然后向左 向下延伸)
这就是一个API函数,只要你调用了它,操作系统就会实现对应的功能,API函数和C语言的库函数一样。你不要知道原理,只要会调用就可以了
这个函数的功能和使用方式参考:
http://blog.csdn.net/xiexievv/article/details/7475848
控制台光标的位置
现在能够控制光标的样式了,但对于批处理来说还远远不够。大部分强大的第三方工具都有设置和获得光标位置的功能,这节我们就来讨论如何实现。
设置光标位置需要用到API函数SetConsoleCursorPosition,需要的参数还是输出句柄,和欲设置的坐标。坐标用COORD结构体就可以了。
例:
将光标移动到(5,3):
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X=5;
pos.Y=3;
SetConsoleCursorPosition(hOut,pos);
获取光标的位置,没有专用的API函数。我们需要通过另一个API函数GetConsoleScreenBufferInfo来获取。其中,GetConsoleScreenBufferInfo的参数分别为输出句柄以及CONSOLE_SCREEN_BUFFER_INFO结构体的指针。CONSOLE_SCREEN_BUFFER_INFO结构体中包含了许多控制台缓冲区的属性,其中我们需要的是一个名为dwCursorPosition的COORD结构体,包含了光标的位置。
例:
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo);
上面的例子,bInfo.dwCursorPosition就是当前的坐标