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、
· 深入理解 C# 异步编程:同步、Task.Wait () 与 await 的本质区别
· WPF 引用 ASP.NET Core 的 AOT 版本
· 通过 Canvas 将后端发来的一帧帧图片渲染成“视频”的实现过程
· 当加密ID需要变成Guid:为什么我选择了AES-CBC而非GCM?
· 基于 epoll 的协程调度器——零基础深入浅出 C++20 协程
· .NET周刊【8月第1期 2025-08-03】
· Manus快速搭建个人网站
· 这套 Java 监控系统太香了!我连夜给项目加上了
· 【译】GPT-5 现已在 Visual Studio 中可用
· 千亿消息“过眼云烟”?Kafka把硬盘当内存用的性能魔法,全靠这一手!