Qt5_自定义处理Windows消息函数

ZC:(1)、“#include <QAbstractNativeEventFilter>”,(2)、貌似 返回True(意思是 处理过了) 返回False(意思是还需要继续处理)

1、参考网址:(ZC: 自定义Windows消息处理)

http://bbs.csdn.net/topics/391054195

http://blog.csdn.net/zhangjinqing1234/article/details/49903613

2、关键字:

类QAbstractNativeEventFilter,虚函数nativeEventFilter

3、两种方式:

  3.1、窗口类 直接继承 类QAbstractNativeEventFilter,实现 虚函数nativeEventFilter

  ZC: 该方式 我没有测试

class MainWindow : public QMainWindow, public QAbstractNativeEventFilter
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE
    {
        //...
        return false;
    };

private:
    Ui::MainWindow *ui;
};

   ZC:(20180512)尝试下来,是可以的,但是 在 main(...)函数中还是要安装 事件过滤器,如下:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    // 没有这一句的话,不会进行 事件过滤
    a.installNativeEventFilter(&w);// 注意,不是“a.installEventFilter(w);”,少了 "Native"

    return a.exec();
}

  3.2、自定义类 继承类QAbstractNativeEventFilter,实现 虚函数nativeEventFilter,并 installNativeEventFilter

  ZC: 该方式 我测试过,是OK的,内容记录下来:

    3.2.1、自定义类 继承类QAbstractNativeEventFilter,实现 虚函数nativeEventFilter

      classNativeEventFilterZ.h : 

#ifndef CLASSNATIVEEVENTFILTERZ_H
#define CLASSNATIVEEVENTFILTERZ_H

#include <QDebug>
#include <qabstractnativeeventfilter.h>

#include <windows.h>
#pragma comment(lib, "user32.lib")

#define WM_WinCreate WM_USER+1000

class NativeEventFilterZ : public QAbstractNativeEventFilter
{
    //Q_OBJECT // ZC: 这个不需要...
public:
    virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE
    {
        MSG* pMsg = reinterpret_cast<MSG*>(message);
        //if(pMsg->message == WM_COPYDATA)
        //{
        //    qDebug()<<"MainWindow windows system message WM_COPYDATA";
        //}
        //qDebug() << "pMsg->message : " << pMsg->message;
        if(pMsg->message == WM_WinCreate)
        {
            void* p = NULL;
            qDebug() << "WM_WinCreate";
            return true;
        }
        return false;
    }
};

#endif // CLASSNATIVEEVENTFILTERZ_H

    3.2.2、installNativeEventFilter :

      main.cpp : 

#include "mainwindow.h"
#include <QApplication>

#include "classNativeEventFilterZ.h"
#include <QDebug>

#include <Windows.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    qDebug() << "MainWindow.winId : " << w.winId() << " , " << GetCurrentThreadId();

    NativeEventFilterZ nativeEventFilterZ;
    a.installNativeEventFilter(&nativeEventFilterZ); // ZC: 这里,注意该函数中有"Native"
    return a.exec();
}

4、

5、

原文地址:https://www.cnblogs.com/cppskill/p/5550056.html