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、
