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、