当前位置:首页 > Code > 正文内容

QT PostMessage给mfc程序无法接收

许玮3年前 (2021-06-11)Code2628

首先是怎么发送

//包含头文件
#include <windows.h>
//我的自定义数据结构
typedef struct
{
    wchar_ttcText[256];//the text to display("" is clear)
    unsigned long dwBarNo;//the bar no to display
    unsigned long dwDelay;//the text display time(0 is for ever)
    unsigned long dwFlag;//0 is show, 1 is close
    unsigned long dwColor;//the OSD color refer value
    unsigned long dwFontSize;//the OSD font size
    wchar_t  cFont[256];//the OSD font name
} OSDDATA;
//发送消息的代码
OSDDATA osddata;
HWND hwd = ::FindWindow(NULL,L"My OSD APP");
if(IsWindow(hwd))
{
      qDebug("find window suc\n");
      lstrcpy(osddata.tcText, L"Profile 1");
      osddata.dwBarNo = 0;
      osddata.dwFlag = 0;
      osddata.dwDelay =3 * 500;//OSD delay time unit is millisecond.
      lstrcpy(osddata.cFont, L"Arial");
      osddata.dwFontSize = 60;
      osddata.dwColor = RGB(255,0,0);
      COPYDATASTRUCT copystru;
      ZeroMemory(&copystru, sizeof(copystru));
      copystru.cbData = sizeof(osddata);
      copystru.lpData = &osddata;
      BOOL bRet = ::PostMessage(hwd, WM_COPYDATA, NULL, reinterpret_cast<LPARAM>(&copystru));
      if(bRet)
      {
           qDebug("send fail\n");
      }
}
测试发现接收端(就是My OSD APP那个窗口)没有收到任何消息,
我先是显示怀疑接收端是不是有问题,于是在mfc环境写了个测试代码发送同样的消息,结果能接收到。
于是加入了qDebug信息,发现能找到窗口句柄,而且PostMessage返回值也是0,表示发送成功了。
然后我开始百度了,发现别人举的例子都没什么不同,
让我一度怀疑是不是数据格式出错或者溢出了,于是我把数据都改成NULL,结果还是没反应。
最后我灵机一动,网上大家的文章名字虽然都是SendMessage/PostMessage,但是举例代码都是用的SendMessage,
于是我改成SendMessage试了一下,结果成功了。。
浪费了好几个小时,记录下来,以后再分析原因,也免得以后再吃这个亏。


扫描二维码推送至手机访问。

版权声明:本文由Will编程学习之路发布,如需转载请注明出处。

本文链接:http://willhsu.com/?id=29

标签: QT
分享给朋友:

相关文章

QT获得系统路径6年前 (2018-11-14)
QSlider进度条的QSS样式6年前 (2018-11-14)
Gitea上传3年前 (2021-06-04)
QT侦测HID设备的插拔4年前 (2020-05-19)

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。