初识句柄操作(控制台窗口小实验)

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

 

我们都知道,使用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  

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

                                            Vane_Tse On the Road.   2014-06-20   17:02:15

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值