首页 > 代码库 > 初识句柄操作(控制台窗口小实验)
初识句柄操作(控制台窗口小实验)
今日学习了控制台使用句柄操作的方法。
我们都知道,使用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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。