一个进程A(一个窗口)中有如下代码://找到接收消息的窗口(窗口名为进程B)
CString str="进程B";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
{
COPYDATASTRUCT buf;
char * s=new char[m_Msg1.GetLength()];   //m_Msg1为CString类型的变量
s=m_Msg1.GetBuffer(0);

buf.cbData=strlen(s)+1;
buf.lpData=s;
pWnd->SendMessage(WM_COPYDATA,0,(LPARAM)&buf); //传送大量数据要用WM_COPYDATA消息
}如何在另外一个进程B(一个窗口)中收到上述进程中发出的消息?主要想实现的功能是进程A中的字符串发给B,然后在B中显示...
判断wParam=和lParam的值试过,貌似不行.....

解决方案 »

  1.   

    char * s=new char[m_Msg1.GetLength()];   //m_Msg1为CString类型的变量
            s=m_Msg1.GetBuffer(0);
    =========这代码有内存泄漏啊.根本不需要用new分配空间
      

  2.   

    我看过一个示例程序可以啊,就是判断Param=和lParam的值
    代码如下:
    进程Sender:
    void CSenderDlg::OnCommand1() 
    {
    //找到接收消息的窗口(窗口名为Receiver)
    CString str="Receiver";
    CWnd *pWnd=CWnd::FindWindow(NULL,str);
    if(pWnd)
    pWnd->SendMessage(WM_COMM,0,0); 
    }
    //发送命令二
    void CSenderDlg::OnCommand2() 
    {
    //找到接收消息的窗口(窗口名为Receiver)
    CString str="Receiver";
    CWnd *pWnd=CWnd::FindWindow(NULL,str);
    if(pWnd)
    pWnd->SendMessage(WM_COMM,0,1); 
    }
    //发送命令三
    void CSenderDlg::OnCommand3() 
    {
    //找到接收消息的窗口(窗口名为Receiver)
    CString str="Receiver";
    CWnd *pWnd=CWnd::FindWindow(NULL,str);
    if(pWnd)
    pWnd->SendMessage(WM_COMM,1,0); 
    }进程Receiver:
    void CReceiverDlg::OnReceiveMsg(WPARAM wParam,LPARAM lParam)
    {
    if(wParam==0 && lParam==0)
    AfxMessageBox("主控程序发送命令1!");
    if(wParam==0 && lParam==1)
    AfxMessageBox("主控程序发送命令2!");
    if(wParam==1 && lParam==0)
    AfxMessageBox("主控程序发送命令3!");
    }