zoukankan      html  css  js  c++  java
  • 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、

  • 相关阅读:
    跳槽面试技巧记录
    看了多篇2019年的面经后的个人总结
    TypeScript躬行记(8)——装饰器
    TypeScript躬行记(7)——命名空间
    TypeScript躬行记(6)——高级类型
    TypeScript躬行记(5)——类型兼容性
    TypeScript躬行记(4)——泛型
    TypeScript躬行记(3)——类
    TypeScript躬行记(2)——接口
    Error, some other host already uses address 192.168.0.202错误解决方法
  • 原文地址:https://www.cnblogs.com/cppskill/p/5550056.html
Copyright © 2011-2022 走看看