码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-23 00:28:08      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   color   

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

 

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

初识句柄操作(控制台窗口小实验),布布扣,bubuko.com

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

标签:style   class   blog   code   http   color   

原文地址:http://www.cnblogs.com/slimjerk/p/3799764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!