• 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、

  • 相关阅读:
    Java实现 LeetCode 211 添加与搜索单词
    跨平台Unicode与UTF8互转代码
    C++转换unicode utf-8 gb2312编码
    c++ ANSI、UNICODE、UTF8互转
    Visual C++ unicode and utf8 转换
    Unicode和UTF-8的关系
    boost uuid 学习笔记
    boost uuid
    Darwin Streaming server 的 Task 类
    VS2010下编译安装DarwinStreamingServer5.5.5
  • 原文地址:https://www.cnblogs.com/cppskill/p/5550056.html
Copyright © 2020-2023  润新知