码迷,mamicode.com
首页 > 编程语言 > 详细

用C++读取鼠标在控制台上的操作

时间:2020-01-25 18:04:52      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:end   初始   ret   ++   char   hand   default   etc   include   

与读取键盘信息类似,读取鼠标信息也是通过 ReadConsoleInput 函数来实现

咱先说一下需要用到的头文件:

#include <windows.h>

响应鼠标点击事件的变量类型

INPUT_RECORD

咱先介绍一下ReadConsoleInput这个函数

typedef struct _MOUSE_EVENT_RECORD { 
        COORD dwMousePosition;      // 当前鼠标位置
        DWORD dwButtonState;        // 鼠标按钮状态
        DWORD dwControlKeyState;    // 键盘控制键状态
        DWORD dwEventFlags;         // 事件状态
} MOUSE_EVENT_RECORD;
//这个东西一般都在"INPUT_RECORD的变量名.Event.MouseEvent.以上变量"
  1. 第一个参数存放鼠标的位置信息,类型为 COORD 坐标类型;

  2. 第二个参数(dwButtonState)为鼠标的按键状态,包含的值如下:

鼠标按键状态码(dwButtonState) 说明
FROM_LEFT_1ST_BUTTON_PRESSED 最左边按键
FROM_LEFT_2ND_BUTTON_PRESSED 左起第二个按键
FROM_LEFT_3RD_BUTTON_PRESSED 左起第三个按键
FROM_LEFT_4TH_BUTTON_PRESSED 左起第四个按键
RIGHTMOST_BUTTON_PRESSED 最右边按键
  1. 第三个参数是键盘控制键状态,这个和上一章的内容是一样的;

  2. 最后一个参数(dwEventFlag)为事件状态:

事件状态码(dwEventFlag) 说明
DOUBLE_CLICK 双击
MOUSE_MOVED 移动
MOUSE_WHEELED 滚轮滚动(只适用于Windows 2000/XP)

在程序开头应加上

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
//这是用来添加鼠标输入设备的

用法举例

//我写的一个简单地例子
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFO bInfo;
    INPUT_RECORD mouseRec;
    DWORD res;

    while(1)
    {
        ReadConsoleInput(hIn, &mouseRec, 1, &res);//读取一个鼠标操作
        if(mouseRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)//如果点击了左键
        {
            if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)//如果是双击
            {
                break;  //退出循环
            }
            else//单击的情况
            {
                cout<<mouseRec.Event.MouseEvent.dwMousePosition.X<<" "<<mouseRec.Event.MouseEvent.dwMousePosition.Y<<endl;//输出当前鼠标的位置
            }
        }
    }
    CloseHandle(hOut);  // 关闭标准输出设备句柄  
    CloseHandle(hIn);   // 关闭标准输入设备句柄  
}
//摘自网络
#include <windows.h>  
#include <stdio.h>  
 
int main(void)  
{  
    // 获取标准输入输出设备句柄  
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);        
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); 
    CONSOLE_SCREEN_BUFFER_INFO bInfo;
    INPUT_RECORD    mouseRec;
    DWORD           res;
    COORD           crPos, crHome = {0, 0};
    printf("[Cursor Position] X: %2lu  Y: %2lu\n", 0, 0);   // 初始状态
    while (1)
    {
        ReadConsoleInput(hIn, &mouseRec, 1, &res);
 
        if (mouseRec.EventType == MOUSE_EVENT)
        {
            if (mouseRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)
            {
                if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
                {
                    break;  // 左键双击 退出循环
                }
            }           
            crPos = mouseRec.Event.MouseEvent.dwMousePosition;
            GetConsoleScreenBufferInfo(hOut, &bInfo);
            SetConsoleCursorPosition(hOut, crHome);
            printf("[Cursor Position] X: %2lu  Y: %2lu", crPos.X, crPos.Y);
            SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition);
            switch (mouseRec.Event.MouseEvent.dwButtonState)
            {
                case FROM_LEFT_1ST_BUTTON_PRESSED:          // 左键 输出A
                    FillConsoleOutputCharacter(hOut, 'A', 1, crPos, &res);
                    break;      // 如果使用printf输出,则之前需要先设置光标的位置
    
                case RIGHTMOST_BUTTON_PRESSED:              // 右键 输出a
                    FillConsoleOutputCharacter(hOut, 'a', 1, crPos, &res);
                    break;
     
                default:
                    break;
            }
        }       
    }
    CloseHandle(hOut);  // 关闭标准输出设备句柄  
    CloseHandle(hIn);   // 关闭标准输入设备句柄  
    return 0;  
}

用C++读取鼠标在控制台上的操作

标签:end   初始   ret   ++   char   hand   default   etc   include   

原文地址:https://www.cnblogs.com/fox-nest/p/12233197.html

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