【 VC++ 】 控制台光标的相关操作
2013-09-24 17:07
253 查看
【 VC++ 】 控制台光标的相关操作
——————— 【 转载请保留 】 ———————作者:Defanive
博客:Console.Dec.Cn(Hi.Baidu.Com/Console_App)
——————— 【 谢谢合作 】 ———————
类型:原创
时间:09.03.21
测试环境:VC++ 6.0
命令行的光标(ConsoleCursor)其实就是一个另类的插入符(Caret)。插入符是什么呢?当你在记事本打字的时候,那个一闪一闪的竖线就叫做插入符。插入符的作用有多大呢?没有了插入符,假如你正在输入第二十个字,突然发现第一个字打错了,那么你得把正确的十九个字和错误的第一个字全删了,再把所有东西重新打一遍。然而,系统没有给任何命令是可以操作命令行光标的,光标的存在实在是名存实亡,完全不能发挥光标的真正用途。本教程的目的,就是让大家学会在命令行程序中控制光标。
一、CONSOLE_CURSOR_INFO 结构体
CONSOLE_CURSOR_INFO 结构体中包含了关于命令行光标的一些信息,是否显示和光标大小两个信息。通过更改这个结构体,再赋给命令行,就可以实现想要的一些效果了。
基本思路:
首先先读取命令行现在的 CONSOLE_CURSOR_INFO 结构体信息,需要用到API函数GetConsoleCursorInfo。GetConsoleCursorInfo 需要用到输出句柄,可以通过API函数GetStdHandle获得。
然后改变结构体信息,再使用API函数SetConsoleCursorInfo
例:
隐藏光标:
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=false;
SetConsoleCursorInfo(hOut,&cci);
二、控制台光标的位置
现在能够控制光标的样式了,但对于批处理来说还远远不够。大部分强大的第三方工具都有设置和获得光标位置的功能,这节我们就来讨论如何实现。
设置光标位置需要用到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就是当前的坐标
相关文章推荐
- c/c++ 控制台光标的相关操作
- VC下控制台中的光标定位和清屏
- VC 鼠标和光标操作的API函数
- VC操作Excel文件编程相关内容总结
- VC++文件相关操作的函数封装实现
- VC操作Excel文件编程相关内容总结
- VC操作Excel文件编程相关内容总结
- vc++基础班[26]---进程的相关操作
- vc操作office相关资料汇总
- VC++ 常用控件相关操作
- vc中对sqlite数据库的相关操作
- VC在控制台模式下访问Oracle数据库的操作指令
- VC 屏幕相关操作
- VC操作Excel文件编程相关内容总结
- C语言控制台窗口图形界面编程(六):光标操作
- 数据结构操作与运算-CvPoint相关数据结构(printf 控制台)
- VC操作XML相关知识
- VC之注册表相关操作
- VC操作PowerPoint及 放映时候获得相关信息(补充)
- 控制台光标相关