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、

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM