wince6 两个应用程序进程间通信 OnCopyData


发送端

void xxx(CString a1,CString a2)
{
        CString m_strCopyData;
        m_strCopyData=L"|" + a1 + L"|"+ a2 + L"|";//自定义发送的数据
        CWnd *pWnd=CWnd::FindWindow(NULL,L"AAAA");//找到标题为AAAA的应用程序发送数据
        COPYDATASTRUCT  cpd;
         cpd.dwData=0;
         cpd.cbData=m_strCopyData.GetLength();;
         cpd.lpData=(void*)m_strCopyData.GetBuffer(cpd.cbData);
         pWnd->SendMessage(WM_COPYDATA,NULL,(LPARAM)&cpd);//注意这里不能用PostMessage,因其是异步函数,接收端没有收到就会返回


}



接收端,请把窗口标题写为‘AAAA’,才能找到窗口发送

比如应用程序为a1,在a1dlg.h文件中类中定义


// Ca1Dlg 对话框
class Ca1Dlg : public CDialog
{
// 构造
public:
Ca1Dlg(CWnd* pParent = NULL);// 标准构造函数
// 对话框数据
enum { IDD = IDD_A1_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持
BOOL Ca1Dlg::OnCopyData (CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) ;//类中要定义此

}




后面程序内添加

BEGIN_MESSAGE_MAP(Ca1Dlg, CDialog)
ON_WM_COPYDATA()/*消息映射*/ 

END_MESSAGE_MAP()


afx_msg BOOL OnCopyData(  CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct );


BOOL Ca1Dlg::OnCopyData (CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
            {CString m_strCopyData;//传来的数据
                 m_strCopyData=(LPSTR)pCopyDataStruct->lpData; 
                 m_strCopyData=m_strCopyData.Left(pCopyDataStruct->cbData);
                 AfxMessageBox(m_strCopyData);//对话框显示
                 return CDialog::OnCopyData(pWnd, pCopyDataStruct);

            }

你可能感兴趣的:(wince6)