首页 > 代码库 > 初识句柄操作(控制台窗口小实验)

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

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

 

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