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、

Qt5_自定义处理Windows消息函数的更多相关文章

  1. C# 收发和处理自定义的WINDOWS消息

    C# 发送.接收和处理自定义的WINDOWS消息 转载地址:http://blog.chinaunix.net/uid-24427209-id-2608350.html 为了程序启动后自动执行主函数, ...

  2. 易语言调用windows消息函数

    1.SendMessageCallbackA的调用方法 .版本2 .DLL命令 发送消息返回_, 整数型, "user32.dll", "SendMessageCallb ...

  3. 结合windows消息系统理解C#中WndProc函数和DefWndProc函数

    Windows消息系统由3部分组成:     1.消息队列.Windows应用程序的消息是由Windows统一在一个消息队列中管理的.     2.消息循环.应用程序从Windows消息队列中获得自己 ...

  4. C#中如何截取Windows消息来触发自定义事件

    原文 C#中如何截取Windows消息来触发自定义事件 在c#windows开发中,我们常常会遇到拦截windows消息,来触发某个特定任务的问题. 由于目前使用c#的开发人员非常多,而且大多数c#程 ...

  5. TWinControl的刷新过程(5个非虚函数,4个覆盖函数,1个消息函数,默认没有双缓冲,注意区分是TCustomControl还是Windows原生封装控件,执行流程不一样)

    前提条件:要明白在TWinControl有以下四个函数的存在,注意都是虚函数: procedure Invalidate; override;procedure Update; override;pr ...

  6. windows消息机制详解(转载)

    消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键都会使Windows发送一个消息给应用程序.消息本身是作为一个记录传递给应用程序的 ...

  7. Windows消息机制详解

    消息是指什么?      消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...

  8. Windows消息大全(转)

    原链接地址: http://www.cnblogs.com/icebutterfly/archive/2011/08/05/2128864.html 表A-1 Windows消息分布 消息范围说 明 ...

  9. 【转】windows消息和消息队列详解

    转载出处:http://blog.csdn.net/bichenggui/article/details/4677494  windows消息和消息队列 与基于MS - DOS的应用程序不同,Wind ...

随机推荐

  1. 机器学习理论基础学习12---MCMC

    作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,以下简称MCMC)在机器学习,深度学习以及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础.比如分 ...

  2. char* a与char a[]的区别

    char *a 与char a[] 的区别   char *a = "hello" 中的a是指向第一个字符‘a'的一个指针 char a[20] = "hello&quo ...

  3. SV中的覆盖率

    SV采用CRT的激励形式,而判断验证进度的标准也就是覆盖率(coverage). 覆盖率的两种指定形式:显式的,直接通过SV来指定出的,如SVA,covergroup. 隐式的,在验证过程中,随&qu ...

  4. 利用javascript实现css操作

    在很多情况下,都需要对网页上元素的样式进行动态的修改.在JavaScript中提供几种方式动态的修改样式,下面将介绍方法的使用.效果.以及缺陷. 1.使用obj.className来修改样式表的类名. ...

  5. Python:在windows下创建虚拟环境

    我们在用python开发的时候,随着开发应用的增多,比如这个项目用django开发后台,之后又用scrapy来开发爬虫应用等,如果不用虚拟环境这些软件包都会被放到python的site-package ...

  6. oracle中验证身份证是否合法的函数脚本

    --创建函数 入参是身份证   返回1 合法 0不合法 CREATE OR REPLACE FUNCTION fn_checkidcard (p_idcard IN VARCHAR2) RETURN ...

  7. 文本框获取光标位置 ---- ctrl+enter换行

    业务需求:按下enter键发送信息,按下ctrl+enter键换行 下面代码是网上找的资料 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T ...

  8. MySQL Crash Course #21# Chapter 29.30. Database Maintenance & Improving Performance

    终于结束这本书了,最后两章的内容在官方文档中都有详细介绍,简单过一遍.. 首先是数据备份,最简单直接的就是用 mysql 的内置工具 mysqldump MySQL 8.0 Reference Man ...

  9. lambda表达式Bug——修改捕获变量失败

    解<C++ Primer 5th>的 9-50 练习题时,遇到了 lambda表达式值捕获和引用捕获之区别问题. 欲修改捕获的变量 sum,累加之.但当时忘记值捕获和引用捕获是有区别的.下 ...

  10. Intel RDT

    首先 spec, 从671页看起 https://software.intel.com/sites/default/files/managed/a4/60/325384-sdm-vol-3abcd.p ...