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(); }
四、
五、