在串口通信中,MainFrame类中手到串口数据,想把收到的字符串发送给需要的窗口,
     在MainFrm.h中添加#include "MProperty.h"
    CMProperty mpro;    在MainFrm.cpp中
     MainFrm.cpp
    HWND hWnd=mpro.m_hWnd;    
    stradd=&str;
    ::PostMessage(hWnd,WM_SEND,0,(LPARAM)stradd);
消息发送不成功,单步执行时,发现hWnd=0x00000000,不知道什么原因啊,为什么HWND hWnd=mpro.m_hWnd得不到窗口的句柄呢?

解决方案 »

  1.   

        stradd=&str; 
        ::PostMessage(hWnd,WM_SEND,0,(LPARAM)stradd); 你的str是一个局部变量吧?不能这样post过去的
    如果确实要这样post的话,如果你的字符串是一个CString的话
    这样::PostMessage(hWnd,WM_SEND,0,str.AllocSysString()); 在收到这个消息的时候记得要用SysFreeString来释放这个字符串哦
      

  2.   

     stradd=&str; 
    ::PostMessage(hWnd,WM_SEND,0,(LPARAM)stradd); 
    这里的str我是在头文件里定义的,不是局部变量吧 我POST的是这个字符串的地址stradd,这也是.h文件里头定义的 
    这里是找不到接受窗口的句柄hWnd=0x00000000, 
      

  3.   

    我是问为什么接受窗口的句柄为0x00000000,窗口都找不到,怎么发的过去啊
    至于POST还是SEND,性质不是一样吗?
    只是返回快慢问题
      

  4.   

    mpro是什么?哪里定义的?
    还有"至于POST还是SEND,性质不是一样吗?",纠正下,性质不一样
      

  5.   

    在MainFrm.h中添加#include "MProperty.h" 
        CMProperty mpro;
    我说的很清楚了
      

  6.   

    mpro.m_hWnd这个肯定也是NULL了,那么你的mpro是个窗口,Create了吗。
      

  7.   

    是这样的  我是在CMProperty窗口中发送命令到下位机,点确定之后,下位机传送上来的数据发到MainFrame类的LONG CMainFrame::OnComm(WPARAM ch,LPARAM port)函数,在这个函数里头再把收到的数据发给CMProperty,它的对象为mpro,所以CMProperty是一早就存在的。
    LONG CMainFrame::OnComm(WPARAM ch,LPARAM port)  //接收串口数据
    {
    CString  st;
    st.Format("%02X",ch);  
    if (st!="FF")
    {
    str+=st;
    }
    else
    {
    str+=st;
    MessageBox(str);
          //   hWnd=(HWND)GetActiveWindow(); 
         HWND hWnd=mpro.m_hWnd;
    stradd=&str;
    ::PostMessage(hWnd,WM_SEND,0,(LPARAM)stradd); str="";
    }
      

  8.   

    mpro.m_hWnd这个是NULL吗?不是的话就用奇怪了。
      

  9.   

    GetSafeHwnd(),这个是NULL话,证明这个窗口可能已经被谁销毁了。你看一下mpro的成员是不是很多为0Xfffff
      

  10.   

    窗口还没创建.
    CMProperty mpro; //只是定义了一个窗口类.
    你还要创建它,才有窗口.//看看CMProperty类有没有Create()这个方法.
      

  11.   

    窗口从头至尾都在,运行到MessageBox(str)都很正常,MessageBox提示框是覆盖在CMProperty窗口上的,之后窗口也在 并没有被销毁  如果是单步执行OnComm执行完后,又会弹出CMProperty窗口
      

  12.   

    你的MessageBox用的窗口句柄是CMainFrame的,而不是CMProperty你调试一下看看就知道了
    LONG CMainFrame::OnComm(WPARAM ch,LPARAM port)  //接收串口数据 

    CString  st; 
    st.Format("%02X",ch);  
    if (st!="FF") 

    str+=st; 

    else 

    str+=st; 
    MessageBox(str); 
          //  hWnd=(HWND)GetActiveWindow(); 
        HWND hWnd=mpro.m_hWnd;   // 这里断点看一下mpro相关的值就知道了
    stradd=&str; 
    ::PostMessage(hWnd,WM_SEND,0,(LPARAM)stradd); str=""; 
    }