Qt无法正确 sendMessage 的消息

匿名 (未验证) 提交于 2019-12-03 00:38:01

项目背景:

项目需要将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吧!

原文:https://www.cnblogs.com/ct6816678/p/9241763.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!