大概流程是这样的:
1、在CConferenceView接收网络传来的数据,并触发事件:
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg.from), 6);
2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CString* pStr = (CString*)wParam;
this->dlgBar.m_olist.AddItem((short)lParam, pStr->GetBuffer(0), NULL);
pStr->ReleaseBuffer();}msg.from是用户名。现在我想显示用户名的同时,显示用户ip,接收数据代码是不是这样写:
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg.from)&&(LPARAM)&(msg.ip), 6);如果是的话,在OnAddMember(WPARAM wParam, LPARAM lParam)中又该怎样分别获取from和ip呢?谢谢!!

解决方案 »

  1.   

    楼主的问题没有表述清晰:msg.from和msg.ip是什么类型的?
      

  2.   

    用一个结构体,将from和ip都放进去struct SendData
    {
       CString from;
       CString ip;
    };在发送的时候,将SendData整个结构体转换为LPARAM然后SendMessageSendData data;
    //这边是2个值初始化,我不写了AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&data, 20); 接收端就能接收到这个结构体的指针,并访问其中的2个量了
      

  3.   

    AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg.from)&&(LPARAM)&(msg.ip), 6); 这种调用方法不对。
    消息WM_ADDLIST + 1是自定义消息吧?既然是自定义消息,消息的参数可以自定,可这样指定:
    wParam传递msg.from的指针,而lParam传递msg.ip的指针。这样写消息响应函数:
    void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam) 

    CString* pStrFrom = (CString*)wParam;
    CString* pStrIP = (CString*)lParam; 
    this->dlgBar.m_olist.AddItem(pStrFrom, pStrIP);  // 这里按m_olist对象添加项
    delete pStrFrom; 
    delete pStrIP; 
    } 消息发送端代码:
    SendMessage(WM_ADDLIST + 1, (WPARAM)new CString(msg.from), (LPARAM)new CString(msg.ip)); 
      

  4.   

    msg是一个CObject类,头文件声明了:
    CString from;
    CString ip;
    做过网络编程的朋友一定不陌生,就是串行化收发数据啊。
      

  5.   

    不行啊,程序崩溃。我是这样写的
    CString* pStrFrom = (CString*)wParam; 
    CString* pStrIP = (CString*)lParam;  this->dlgBar.m_olist.AddItem(0, pStrFrom->GetBuffer(0),pStrIP->GetBuffer(0));
    pStrFrom->ReleaseBuffer();
      

  6.   

    将用户名和IP传入到结构体里面,用wParam接受这个结构体指针
      

  7.   

    CString一般不这么用的
    可以先用LTCPSTR转
      

  8.   


     SendData *data =  (SendData *)wParam;
     CString StrFrom = data->from;
     CString StrIP = data->ip;
      

  9.   


    因为我的代码中msg头文件已经声明了from和ip两个量: 
    CString from; 
    CString ip; 
    所以我能不能这样做:
    接收数据代码:
    AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&msg, 20); 
    然后再取出这两个量的值:
    Cmsg *msg =  (Cmsg *)wParam; 
    CString StrFrom = data->from; 
    CString StrIP = data->ip;
      

  10.   

    Sorroy!!
    然后再取出这两个量的值:
    Cmsg *msg =  (Cmsg *)wParam;
    CString StrFrom = msg->from;
    CString StrIP = msg->ip;