-
2021-05-19 04:28:38
CROOD就是这样的一个玩意:
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
很明显这个结构可以用来记录坐标
GetStdHandle()函数获得标准输入输出的句柄,参数STD_OUTPUT_HANDLE是个宏,代表标准输出,可以看作显示器
SetConsoleCursorPosition(hout,coord); 看函数名称:设置控制台光标坐标,参数就是设备句柄,坐标,那么把标准输出的句柄传给函数,就可以把光标定位在对应的位置了(左上角位置是0,0然后向左 向下延伸)
下面这段代码可以在屏幕第10行第30列输出"Hello world"
#include
#include
using namespace std;
int main()
{
HANDLE hout;
COORD coord;
coord.X=30;
coord.Y=10;
hout=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout,coord);
cout<
return 0;
}
更多相关内容 -
c语言光标移动
2018-05-07 19:55:071.引入 作为一个C语言入门者,刚开始编写程序时,都使用控制台程序。在控制台中,完成了一个又一个程序。渐渐发现控制台不方便了。控制台貌似只能,从上到下,从左...然后再需要光标移动时,直接调用就可以实现光标的
1.引入
作为一个C语言入门者,刚开始编写程序时,都使用控制台程序。在控制台中,完成了一个又一个程序。渐渐发现控制台不方便了。控制台貌似只能,从上到下,从左到右的进行输出。如果进行页面设计就会发现,想在光标所处位置的上方添加一些内容,该怎么办呢?
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函数。
- 程序员想编写具有Windows风格的软件,必须借助API,API也因此被赋予至高无上的地位。但是,如若没有合适的Windows编程平台,那么Windows开发是一项很复杂的工作。程序员必须熟记一大堆常用的API函数,而且还得对WINDOWS操作系统有深入的了解。
- 在可视化编程IDE出来之后,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“所见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。也就是说可视化编程IDE封装了的API函数的集合,并提供了大量的类库和各种控件,它们替代了API的神秘功能。
- 虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。
Ps :日常使用API的几率很小,所以API不用系统的去学,在需要的时候去查API帮助就足够了。
->在示例程序中GetStdHandle()就是一个API函数。
它的作用是从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄
这里的句柄也可以理解为指光标停留位置的信息。值 含义 STD_INPUT_HANDLE 标准输入的句柄 STD_OUTPUT_HANDLE 标准输出的句柄 STD_ERROR_HANDLE 标准错误的句柄 GetStdHandle()的几种参数
c.COORD
COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。
typedef struct _COORD { SHORT X; SHORT Y; } COORD;
COORD是一个结构体,表示一个坐标。定义包含在Windows.h的头文件里。
d.SetConsoleCursorPosition()
SetConsoleCursorPosition是一个实现光标的位置控制的计算机函数。
它的两个参数为(光标句柄,COORD的结构体)
作用是将光标句柄,移动到COORD指向的位置。 -
C语言光标移动函数
2018-04-19 23:00:10static void _SetPos(int x, int y)//移动光标到X、Y位置 { COORD position; HANDLE handle; handle=GetStdHandle(STD_OUTPUT_HANDLE);...}C语言光标移动函数,COORD实际上是一个C语言内部做好的结构体,结构...static void _SetPos(int x, int y)//移动光标到X、Y位置 { COORD position; HANDLE handle; handle=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(handle, position); }
C语言光标移动函数,COORD实际上是一个C语言内部做好的结构体,结构体中只包含两个元素,x和y,这里的x、y就是代表着光标移动的位置
typedef struct _COORD { int x; int y; } ;
实际上就是一个这样的,只不过这里不需要你再去定义一个结构体,直接调用就可以。这个结构体就是用来记录坐标。
GetStdHandle () 这个函数也是C语言内部已经设定好的,所以这里直接调用就行。 GetStdHandle( STD_OUTPUT_HANDLE ) 这里就是一个固定的函数格式,获得标准输出函数的句柄。
HANDLE handle; 这里和COORD 是一样的HANDLE是一个一定由系统定制的结构体直接调用就可以。将获得的标准输出句柄给handle。
SetConsoleCursorPosition 这个函数是用来移动光标的,也是由C语言直接提供给你的直接使用就可以。
这个程序能够在DOS框中的30,10位置输出一个Hello world#include <windows.h> #include <iostream> using namespace std; int main() { HANDLE hout; COORD coord; coord.X=30; coord.Y=10; hout=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hout,coord); cout<<"Hello world!\n"; return 0; }
这里的X 轴和 Y 轴如上图。
这里光标移动就是一个固定的套路,有些具体的知识像什么是句柄这些,在我当前的知识范围和能力还不能具体详细的解释清楚,如果以后可以的话再具体写吧。 -
C语言实现光标移动
2021-05-18 10:45:54C语言实现光标移动#include #include #include HANDLE hout;char inputcontext(){int ch;COORD c;CONSOLE_SCREEN_BUFFER_INFO csbi;c.X=10;c.Y=10;ch=_getch();//0x0d是回车的键码,0xe0是上下左右的键码while(ch0xe...C语言实现光标移动
#include
#include
#include
HANDLE hout;
char inputcontext()
{
int ch;
COORD c;
CONSOLE_SCREEN_BUFFER_INFO csbi;
c.X=10;
c.Y=10;
ch=_getch();
//0x0d是回车的键码,0xe0是上下左右的键码
while(ch0xe0||ch0x0d)
{
GetConsoleScreenBufferInfo(hout,&csbi);
c.X=csbi.dwCursorPosition.X;
c.Y=csbi.dwCursorPosition.Y;
if(ch0x0d)
{
c.X=0;
c.Y++;
}
else if(ch0xe0)
{
ch=_getch();
if (ch == 0x48)//上
{
if (c.Y != 0)
c.Y–;
}
else if (ch == 0x50)//下
{
c.Y++;
}
else if (ch == 0x4b)//左
{
if (c.X != 0)
c.X–;
}
else if(ch == 0x4d)//右
{
if (c.X != 79)//向右写79个字换行
c.X++;
else
{
c.X = 0;
c.Y++;
}
}
}
SetConsoleCursorPosition(hout,c);
ch=_getch();
}
return ch;
}
int main()
{
char ch;
hout=GetStdHandle(STD_OUTPUT_HANDLE);
while(1)
{
ch=inputcontext();
putch(ch);
}
}
//注意按方向键输入了两个char第一个char是判断方向键的,第二个键是判断具体按下了哪个方向键,所以对方向键的判断要接收两次字符。
-
C语言 移动光标
2021-09-20 13:23:55//设置光标位置 } 这个比system(“cls”)效果好,闪屏不会特别厉害 如果需要清屏,这样调用即可 SetPos(0, 0) #include #include #include void MoveCursorTo(int nRows, int nCols) {//在任意位置移动光标 COORD ... -
C语言实现控制台中光标随意移动
2021-05-18 10:45:56开始准备学习下C,新手哦~~今天弄了个控制台程序,光标可以随意在DOS下移动~~先放一张效果图,不过很丑,大家能不能看懂,哈哈,就是I Love You.代码注释都有,其实好多东西我都是从其他地方拷贝了一些代码,毕竟是... -
C语言实现的光标移动控制(原创)
2011-02-17 16:14:32在console下,用VC实现的光标移动控制,用到win api函数。有了这个,就可以很方便的在console下写ui程序了。 其中实现有: /* 将光标移到指定位置*/ void JR_SetCursor(int x, int y); /* 将光标移到左上角 */ void... -
C语言实现控制台光标任意移动
2018-03-04 11:05:57C语言编程实现控制台上光标的随意移动 上下左右方向键移动光标 回车键光标换行 普通键盘区输入字符 */ #include #include #include /* 定义一个句柄对象,虽然还没有看懂句柄到底是什么情况,但是我觉得这个... -
C语言光标移动
2012-12-07 21:40:00——————————-分割线————————————这里用到了windows.hint move_cur(int x,int y)//移动光标到X,Y{ HANDLE hOut; COORD pos={x, y}; hOut = GetStdHandle(STD_OUTPUT_HANDLE); ... -
C语言中的光标定位函数
2019-11-25 21:40:01C语言中的光标定位函数(将光标移动到屏幕的指定位置) 所谓的光标定位函数,就是实现键盘输入坐标值从而把鼠标的光标移动到相应坐标位置的函数模块,在简单的小游戏如贪吃蛇等需要定位输出的程序中有着较为广泛的... -
C语言光标移动和学生管理系统
2015-05-10 04:07:26!... 自己写了个学生管理系统,然后在网上看到了这张。。然后瞬间感觉碉堡了。。 它的箭头指向是怎么实现的啊?用了二维数组还是用gotoxy...光标移动怎么实现??移动后按enter又出现新的选项光标怎么实现?怎么返回?? -
C语言之实现控制台光标随意移动的实例代码
2021-05-18 10:48:15原理引入windows.h,首先是要获得输入的东西,然后通过判断:1、方向键:执行上下左右的移动功能2 、回车键:...//C语言实现控制台中光标随意移动#include #include #include HANDLE hout;//获得输入char getInput... -
SetConsoleCursorPosition()移动光标函数的使用方法
2021-05-22 02:04:34首先说一下,这个函数的功能即是字面意思,即移动命令行中光标的位置。这里要注意的是,每次调用这个函数都是默认从左上角开始偏移,而与当前光标停留的位置无关。然后我们剖析下这个函数,我们查看定义发现,调用这... -
Linux下C语言终端控制语句:光标移动定位,字体前景背景色设置,清屏等
2018-07-23 20:12:16在window下有TC的conio的库和头文件以及一些系统函数,可以对控制台进行控制,如设置光标位置,改变字体颜色,清屏等等,在用C语言写一些小游戏,或者显示程序菜单时会很方便,但是这个库文件并不是标准的C语言库文件,在... -
用C语言实现五子棋(光标移动)
2021-07-23 12:27:06本次五子棋使用的是光标控制移动,通过按空格键(键值32)来落子,实现游戏的。 我们额外用到的头文件有: #include<getch.h> 通过调用getch()函数来识别 上下左右以及空格的操作。 #include<... -
怎么实现C语言中用键盘控制光标移动?
2021-05-18 09:17:56给你个简单的例子吧:用wsad移动#include#include#includeint main(void){system("mode con cols=30 lines=20");int t[2],position[2]={1,1};char a[20][30],choose;for(t[0]=1;t[0]<19;t[0]++){for(t[1]=1;t[1]&... -
C语言如何在控制台窗口设置光标到指定位置
2018-04-14 21:09:08在用C语言写控制台的程序时,说到控制光标,我们通常就是回车换行或者空格之类的进行移动光标控制,但是这类操作只能是将光标移动到当前光标后面的位置,而且效率极低假设我们想要把光标移动到当前光标以前某个位置... -
【C语言】在VC中使用gotoxy函数实现光标的移动
2017-07-06 20:46:00#include <stdio.h> #include <conio.h> #include <windows.h> void gotoxy(int x, int y) ... /*COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。...... -
控制台中使用上下左右移动光标定位输出(代码分析)
2018-10-15 17:25:35该代码解析基于个人理解基础,文档对代码进行了拆分解释,该中并不具有完整代码;...整体代码功能尚实现了在控制台上使用上下左右移动光标定位输出,代码基于C语言,不支持删除操作,功能有限,仅提供思路。 -
写了个小程序,一直会闪屏,用的gotoxy函数,求大神教
2021-05-22 14:43:57// 得分 void gotoxy(int x,int y)//类似于清屏函数,光标移动到原点位置进行重画 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); ... -
在c语言中如何将(){}【】等括号中的光标移动后面 或者 移出到下一行
2021-03-20 20:05:30在c语言中如何将(){}【】等括号中的光标移动后面 或者 移出到下一行 一般情况下 按上下左右键中的 右箭头 即可移到后面一格 ,如果处于最后一格 再按enter键即可到下一行 -
C语言中怎样隐藏鼠标光标
2021-05-20 14:24:09Windows的大多数场合下,鼠标都是始终可见的。但在有些场合需隐藏鼠标,使之不可见,以免影响屏幕画面的整体效果,如屏幕保护程序运行时,鼠标就是不可见的。在VB中可通过调用Windows API函数ShowCursor()来非常轻松... -
C++ 怎么让光标返回上一行
2021-05-23 01:36:54C/C++ code#include #include void ConPrint(char *CharBuffer, int len);void ConPrintAt(int x, int y, char *CharBuffer, int len);void gotoXY(int x, int y);void ClearConsole(void);void ClearConsoleToColor...