qq_32087649 2016-05-31 15:30 采纳率: 33.3%
浏览 2758
已结题

C++ ReadConsoleInput事件问题

就是下面这一段 在 vs2015里面 只有调试 状态可以用 ctrl+f5 就会没有效果 是什么原因?

 #include <stdio.h>  
#include <windows.h>  
#include <conio.h>  

HANDLE handle_in;
HANDLE handle_out;
CONSOLE_SCREEN_BUFFER_INFO csbi;         //定义窗口缓冲区信息结构体  

int main()
{
    handle_in = GetStdHandle(STD_INPUT_HANDLE);       //获得标准输入设备句柄  
    handle_out = GetStdHandle(STD_OUTPUT_HANDLE);     //获得标准输出设备句柄  
    INPUT_RECORD mouserec;       //定义输入事件结构体  
    DWORD res;       //用于存储读取记录  
    COORD pos;       //用于存储鼠标当前位置  
    COORD size = { 80, 25 };   //窗口缓冲区大小  
    GetConsoleScreenBufferInfo(handle_out, &csbi);   //获得窗口缓冲区信息  
    SetConsoleScreenBufferSize(handle_out, size);    //设置窗口缓冲区大小  
    for (;;)
    {
        ReadConsoleInput(handle_in, &mouserec, 1, &res);       //读取输入事件  
        pos = mouserec.Event.MouseEvent.dwMousePosition;     //获得当前鼠标位置  
        if (mouserec.EventType == MOUSE_EVENT)     //如果当前为鼠标事件  
        { 
            if (mouserec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
            {
                putchar('A');
            }
            //单击鼠标右键,输出字符B  
            if (mouserec.Event.MouseEvent.dwButtonState == RIGHTMOST_BUTTON_PRESSED)
            {
                putchar('B');
            }
            //双击退出  
            if (mouserec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
            {
                break;
            }
        }
    }
    CloseHandle(handle_out);
    CloseHandle(handle_in);
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 普通网友 2016-10-07 16:39
    关注

    handle_in;
    HANDLE handle_out;
    CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体

    int main()
    {
    handle_in = GetStdHandle(STD_INPUT_HANDLE); //获得标准输入设备句柄

    handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄

    INPUT_RECORD mouserec; //定义输入事件结构体

    DWORD res; //用于存储读取记录

    COORD pos; //用于存储鼠标当前位置

    COORD size = { 80, 25 }; //窗口缓冲区大小

    GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息

    SetConsoleScreenBufferSize(handle_out, size); //设置窗口缓冲区大小

    for (;;)
    {
    ReadConsoleInput(handle_in, &mouserec, 1, &res); //读取输入事件

    pos = mouserec.Event.MouseEvent.dwMousePosition; //获得当前鼠标位置

    if (mouserec.EventType == MOUSE_EVENT) //如果当前为鼠标事件

    {
    if (mouserec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
    {
    putchar('A');
    }
    //单击鼠标右键,输出字符B

    if (mouserec.Event.MouseEvent.dwButtonState == RIGHTMOST_BUTTON_PRESSED)
    {
    putchar('B');
    }
    //双击退出

    if (mouserec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
    {
    break;
    }
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧