消息是Windows操作系统提供的一种驱动机制。利用消息进行进程通信,就是使用消息激活某种操作的过程。对于进程间的通信,一般采用用户自定义的消息(WM_USER+X)来完成,也可以使用Windows定义的WM_COPYDATA消息来共享数据。
数据发送。在数据发送进程中,调用FindWindow()函数根据窗口的标题或者接收窗体的类名搜索窗口,然后给COPYDATASTRUCT结构赋值,最后调用SendMessage()函数发送消息。实现了两个对话框窗口类(CSendDlg和CRecieveDlg),一个用于接受数据消息,一个用于发送数据消息。具体代码如下:
void CSendDlg::OnSend()
{
UpdateData(TRUE);
CWnd *pWnd = CWnd::FindWindow(NULL, _T("Recieve"));
//查找DataRecv进程
if(pWnd==NULL)
{
MessageBox(_T("寻找接收窗口失败!"));
return;
}
COPYDATASTRUCT cpd; //给COPYDATASTRUCT结构赋值
cpd.dwData = 0;
cpd.cbData = m_send.GetLength();
cpd.lpData = (void*)m_send.GetBuffer(cpd.cbData);
pWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&cpd);
//发送
}
数据接收。实现数据接收的代码如下:
BOOL CRecieveDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT*
pCopyDataStruct)
{
m_strrecieve = (LPSTR)pCopyDataStruct->lpData;
m_strrecieve =
m_recieve.Left(pCopyDataStruct->cbData); //获得实际长度字符串
UpdateData(FALSE); //更新数据
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
Copyright 2011-2020 © MallocFree. All rights reserved.