
正文
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+1000class 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、







