过滤窗口最小化事件

2023-03-17 14:29:20 浏览数 (1)

本文以简单的例子实现windows平台下的过滤窗口最小化事件功能。

例子:

代码语言:javascript复制
#include <QApplication>
#include <QWidget>
#include <QAbstractNativeEventFilter>

#include <windows.h>

class NativeFilter : public QAbstractNativeEventFilter
{
    bool nativeEventFilter(const QByteArray &eventType,
                           void *message,
                           long *result)
    {
        MSG *msg = static_cast<MSG *>(message);

        /* 过滤点击最小化按钮触发的最小化事件 */
        if (msg->message == WM_NCLBUTTONDOWN && msg->wParam == HTREDUCE)
            return true;

        /* 过滤点击任务栏图标触发最小化事件 */
        if (msg->message == WM_SYSCOMMAND && msg->wParam == SC_MINIMIZE)
            return true;

        return false;
    }
};

int main(int argc, char **argv)
{
    QApplication a(argc, argv);
    a.installNativeEventFilter(new NativeFilter);

    /* QWidget最小化按钮无效化 */
    QWidget w;
    w.show();

    return a.exec();
}

0 人点赞