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 的消息的主要内容,如果未能解决你的问题,请参考以下文章
使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。
SendMessage(hwnd, registeredmssghere, 0, 1) 已接收但未被其发送到的挂钩线程正确识别!
是否有任何方法可以检测WebSocketClientProtocol的sendMessage()实际上是否向服务器发送消息?