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


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

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

  • 相关阅读:
    CentOS 6.10 安装mysql
    yum安装no more mirrors to try
    mysql密码问题
    tomcat的安装部署(CentOS8)(VM)
    tomcat的安装部署(windows10)
    docker中mongdb常用操作
    iphone手机卡顿解决方案
    常用sql进阶语句
    关键时刻,让你的iphone拒绝掉的所有来电
    jenkins环境安装(windows)
  • 原文地址:https://www.cnblogs.com/slimjerk/p/3799764.html
Copyright © 2020-2023  润新知