提交 4ef6b7b3 编写于 作者: mahuifa's avatar mahuifa

feat:增加Windows下鼠标中键按下、功能键前进后退的事件

上级 8e35c968
......@@ -9,10 +9,11 @@
static HHOOK g_hook = nullptr;
/**
* @brief 处理鼠标事件的回调函数,由于这不是一个成员函数,所以需要通过中间单例类GlobalMouseEvent将鼠标信号传递出来
* @brief 处理鼠标事件的回调函数,由于这不是一个成员函数,所以需要通过中间单例类mouseEvent将鼠标信号传递出来
* 具体内容看https://learn.microsoft.com/zh-cn/previous-versions/windows/desktop/legacy/ms644986(v=vs.85)
* @param nCode 挂钩过程用于确定如何处理消息的代码。如果nCode小于零,则挂钩过程必须将消息传递给 CallNextHookEx 函数而不进行进一步处理,并且应返回CallNextHookEx返回的值
* @param wParam 信号类型:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE、WM_MOUSEWHEEL、WM_MOUSEHWHEEL、WM_RBUTTONDOWN 或WM_RBUTTONUP(鼠标中键点击和拓展按还没找到怎么弄)。
* @param wParam 信号类型:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE、WM_MOUSEWHEEL、WM_MOUSEHWHEEL、WM_RBUTTONDOWN 或WM_RBUTTONUP。
* 其它扩展按键可以看https://learn.microsoft.com/en-us/windows/win32/inputdev/mouse-input
* @param lParam MSLLHOOKSTRUCT结构体指针
* @return
*/
......@@ -44,6 +45,42 @@ LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
emit GlobalMouseEvent::getInstance()->wheelEvent(new QWheelEvent(point, delta, Qt::MiddleButton, Qt::NoModifier));
break;
}
case WM_MBUTTONUP: // 鼠标中键释放
emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonRelease, point, Qt::MiddleButton, Qt::MiddleButton, Qt::NoModifier));
break;
case WM_MBUTTONDOWN: // 鼠标中键按下
emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonPress, point, Qt::MiddleButton, Qt::MiddleButton, Qt::NoModifier));
break;
case WM_XBUTTONDOWN: // 鼠标功能键按下
{
MSLLHOOKSTRUCT * msll = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam);
int Button = GET_XBUTTON_WPARAM (msll->mouseData);
switch (Button)
{
case XBUTTON1: // 后退
emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonPress, point, Qt::XButton1, Qt::XButton1, Qt::NoModifier));
break;
case XBUTTON2: // 前进
emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonPress, point, Qt::XButton2, Qt::XButton2, Qt::NoModifier));
break;
}
break;
}
case WM_XBUTTONUP: // 鼠标功能键释放
{
MSLLHOOKSTRUCT * msll = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam);
int Button = GET_XBUTTON_WPARAM (msll->mouseData);
switch (Button)
{
case XBUTTON1:
emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonRelease, point, Qt::XButton1, Qt::XButton1, Qt::NoModifier));
break;
case XBUTTON2:
emit GlobalMouseEvent::getInstance()->mouseEvent(new QMouseEvent(QEvent::MouseButtonRelease, point, Qt::XButton2, Qt::XButton2, Qt::NoModifier));
break;
}
break;
}
default:
break;
}
......
......@@ -30,7 +30,7 @@ include($$PWD/GlobalMouseKey/GlobalMouseKey.pri)
INCLUDEPATH += $$PWD/GlobalMouseKey
# 定义程序版本号
VERSION = 1.6.2
VERSION = 1.8.0
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
contains(QT_ARCH, i386){ # 使用32位编译器
......
......@@ -54,6 +54,16 @@ void Widget::on_mouseEvent(QMouseEvent* event)
but = "中键";
break;
}
case Qt::XButton1:
{
but = "功能键【后退】";
break;
}
case Qt::XButton2:
{
but = "功能键【前进】";
break;
}
default:
{
but = "未知";
......@@ -70,7 +80,7 @@ void Widget::on_mouseEvent(QMouseEvent* event)
ui->textEdit->append(str);
break;
}
case QEvent::MouseButtonRelease: // 鼠标右键抬起
case QEvent::MouseButtonRelease: // 鼠标抬起
{
QString but;
switch (event->button())
......@@ -90,6 +100,16 @@ void Widget::on_mouseEvent(QMouseEvent* event)
but = "中键";
break;
}
case Qt::XButton1:
{
but = "功能键【后退】";
break;
}
case Qt::XButton2:
{
but = "功能键【前进】";
break;
}
default:
{
but = "未知";
......@@ -106,6 +126,7 @@ void Widget::on_mouseEvent(QMouseEvent* event)
delete event; // 使用完成后记得delete
}
/**
* @brief 全局鼠标滚轮事件
* @param event
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册