Qt无法正确 sendMessage 的消息

Posted ct6816678

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt无法正确 sendMessage 的消息相关的知识,希望对你有一定的参考价值。

项目背景:

项目需要将vc中的代码移植到Qt中,而且由于使用的SDK是32位,所以,Qt使用的版本是MinGW32,另外下载的也是官网最新的版本Qt5.11.1。

系统环境:Windows10

在将windows下的消息机制想通过qt 实现的时候,遇到了问题。

在代码的一处使用了SendMessage 给Qt 的窗口,窗口重载了 naitveEvent来处理这个消息。

在nativeEvent中,可以获得消息,但是获得的消息数据完全不对,

bool DialogB::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    MyMSG *param = reinterpret_cast<MyMSG *>(message);
    qDebug() << "MESSAGE: " << param->message;
    switch (param->message)
    {
    case WM_COPYDATA:
    {
        COPYDATASTRUCT *cds = reinterpret_cast<COPYDATASTRUCT*>(param->lParam);
        if (cds->dwData == CUSTOM_TYPE)
        {
            QString strMessage = QString::fromUtf8(reinterpret_cast<char*>(cds->lpData), cds->cbData);
            QMessageBox::information(this, QStringLiteral("提示"), strMessage);
            *result = 1;
            return true;
        }
    }
    }

    return QWidget::nativeEvent(eventType, message, result);
}

调试发现,输出的message参数数字位9030504,(包含移动窗口时间,消息基本都是这个数据范围大小),明显不对。正常的应该100,200 这样的大小

而同样的代码在其它系统中使用不同版本的qt中编译是好的,怀疑是系统的问题,后来,发现是Qt 版本导致的这个问题,换成5.9.6版本,可以正常工作。

这应该是新版本Qt的一个bug吧!

 

以上是关于Qt无法正确 sendMessage 的消息的主要内容,如果未能解决你的问题,请参考以下文章

Windows SendMessage()消息代码[关闭]

使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。

SendMessage(hwnd, registeredmssghere, 0, 1) 已接收但未被其发送到的挂钩线程正确识别!

是否有任何方法可以检测WebSocketClientProtocol的sendMessage()实际上是否向服务器发送消息?

控制台输出在 Qt5 中无法正确显示

Qt:移动无边框窗体(使用Windows的SendMessage)