博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初识句柄操作(控制台窗口小实验)
阅读量:7093 次
发布时间:2019-06-28

本文共 1719 字,大约阅读时间需要 5 分钟。

今日学习了控制台使用句柄操作的方法。

 

我们都知道,使用iostream也可以向屏幕中输出语句。

但它们只能实现基本的输入输出 操作,对于控制台窗口界面的控制却无能为力,而且不能与stdio.h和conio.h友好相处,因为iostream和它们是C++两套不同的输入。

 

因此,我们需要句柄类来帮助我们完成这个操作。

 

下面直接上练习小代码,为贪食蛇清屏的小片段。 经一番查找,习得基本用法。

1 void clrscr(void) { 2     //控制台窗口信息类型 存有缓冲区大小 当前光标位置 窗口显示大小和位置等信息 3     CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 4     // 设备句柄类 5     HANDLE hConsoleOut; 6  7     // 坐标类 结构体 存有x与y坐标 8     COORD home = { 0, 0 }; 9     DWORD dummy;10 11     // 获取标准输出设备句柄 12     // 函数原型为: HANDLE GetStdHandle(DWORD nStdHandle );13     // nStdHandle可以是STD_INPUT_HANDLE(标准输入设备句柄)、14     //    STD_OUTPUT_HANDLE(标准输出设备句柄)和 STD_ERROR_HANDLE(标准错误句柄)。15     hConsoleOut = GetStdHandle(STD_INPUT_HANDLE);16     // 获取窗口信息17     GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);18     // 向窗口填充字符 此处填入' ' 空格用于清屏19     FillConsoleOutputCharacter(hConsoleOut, ' ', csbiInfo.dwSize.X * csbiInfo.dwSize.Y, home, &dummy);20     // 以下为窗口信息类中当前光标位置的设置21     csbiInfo.dwCursorPosition.X = 0;22     csbiInfo.dwCursorPosition.Y = 0;23     // 设置当前句柄光标位置24     SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);25 26     // 记得擦屁股 关闭此句柄类27     CloseHandle(hConsoleOut);28 29 }

为了帮助更好理解,下面给出COORD与CONSOLE_BUFFER_INFO的代码:

1 // 坐标结构体  2 typedef struct _COORD {   3     SHORT X;   4     SHORT Y;  5 } COORD;   6  7  8 // 控制台窗口信息结构体  9 typedef struct _CONSOLE_SCREEN_BUFFER_INFO {  10     COORD dwSize; // 缓冲区大小 11     COORD dwCursorPosition; // 当前光标位置 WORD wAttributes; // 字符属性 12     SMALL_RECT srWindow; // 当前窗口显示的大小和位置13     COORD dwMaximumWindowSize; // 最大的窗口缓冲区大小14 } CONSOLE_SCREEN_BUFFER_INFO  

有了句柄类,就能帮助更好的操作屏幕,为我们实现控制台游戏打下进一步基础。

                                               2014-06-20   17:02:15

转载于:https://www.cnblogs.com/slimjerk/p/3799764.html

你可能感兴趣的文章
企业级rancher搭建Kubernetes(采用rancher管理平台搭建k8s)
查看>>
预见·智造 2018四季度刊
查看>>
Node.js面试题之2017
查看>>
【源码分享】php怎样接入短信验证码,对接短信验证码接口
查看>>
idou老师教你学Istio 29:Envoy启动流程
查看>>
如何进行时间管理?31页时间管理技能PPT教你
查看>>
Python学习之路——Python基础之基本数据类型(数字、字符串)
查看>>
常见的几种排序算法-插入、选择、冒泡、快排、堆排等
查看>>
今天想学习Python的GUI
查看>>
fdisk和parted
查看>>
about linux
查看>>
shell 数组
查看>>
ASP--文件和文件夹操作
查看>>
网关的作用
查看>>
zabbix 在php7 下安装 always-populate-raw-post-data = -1 问题
查看>>
nginx配置文件中的超时字段
查看>>
iOS UIWebView 加载自签名证书Https网页
查看>>
Ubuntu Server 14.04 perl: warning: Setting locale failed.
查看>>
图像处理基础(三)DFT与IDFT变换
查看>>
salt之external auth
查看>>