+ -
当前位置:首页 → 问答吧 → 用::PostMessage传递结构体,结果乱码?

用::PostMessage传递结构体,结果乱码?

时间:2011-12-03

来源:互联网

先说明一下:
要将一个结构体从CTestDlg传到CDetailDlg并显示相关内容,其中结构体如下
struct SMSG
{
CString sName;
CString sIP;
CString sContent[20];
int iNum;//计数
};
我的做法:
先在TestDlg中定义SMSG msgs;并完善结构体的信息。然后按一个按钮,先生成一个非模态对话框DetailDlg,然后
C/C++ code

::PostMessage(hWindow,WM_SHOWMSG,0,(LPARAM)&msgs);//hWindow是DetailDlg的句柄,且经检测,此时msgs中的内容是完好无损的


在DetailDlg.h中定义一个自定义消息,并添加处理函数
#define WM_SHOWMSG WM_USER+105
afx_msg void OnShowMsg(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(WM_SHOWMSG,OnShowMsg)
C/C++ code

void CDetailDlg::OnShowMsg(WPARAM wParam,LPARAM lParam)
{
    SMSG* p=(SMSG*)&lParam;
    m_strName=p->sName;
    m_strIP=p->sIP;
    m_iNum=p->iNum;//m_strName、m_strIP、m_iNum是3个编辑框关联的变量
    for(int i=0;i<m_iNum;i++)
    {
        m_str=p->sContent[i];
        m_list.AddString(m_str);//将每条内容加到列表框
    }
    UpdateData(FALSE);
}


结果在DetailDlg里显示的内容都是乱码。。。怎么解决?

作者: dingxz105090   发布时间: 2011-12-03

看看是不是作用域的问题,因为postmessage是异步的,它会立马返回,如果在OnShowMsg中,你的那个东西已经超出其作用域了,就会出现这个问题,有的时候程序还会crash

作者: maoxing63570   发布时间: 2011-12-03

热门下载

更多