Qt5_自定義處理Windows消息函數

ZC:(1)、「#include <QAbstractNativeEventFilter>」,(2)、貌似 返回True(意思是 處理過了) 返回False(意思是還須要繼續處理)windows

 

一、參考網址:(ZC: 自定義Windows消息處理)函數

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

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

 

二、關鍵字:spa

類QAbstractNativeEventFilter,虛函數nativeEventFilter.net

 

三、兩種方式:code

  3.一、窗口類 直接繼承 類QAbstractNativeEventFilter,實現 虛函數nativeEventFilterblog

  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.二、自定義類 繼承類QAbstractNativeEventFilter,實現 虛函數nativeEventFilter,並 installNativeEventFilter

  ZC: 該方式 我測試過,是OK的,內容記錄下來:

    3.2.一、自定義類 繼承類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.二、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();
}

 

四、

五、

相關文章
相關標籤/搜索