标题:消息队列机制


消息是Windows操作系统提供的一种驱动机制。利用消息进行进程通信,就是使用消息激活某种操作的过程。对于进程间的通信,一般采用用户自定义的消息(WM_USER+X)来完成,也可以使用Windows定义的WM_COPYDATA消息来共享数据。

 

数据发送。在数据发送进程中,调用FindWindow()函数根据窗口的标题或者接收窗体的类名搜索窗口,然后给COPYDATASTRUCT结构赋值,最后调用SendMessage()函数发送消息。实现了两个对话框窗口类(CSendDlgCRecieveDlg),一个用于接受数据消息,一个用于发送数据消息。具体代码如下:

 

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);

}



看文字不过瘾?点击我,进入周哥教IT视频教学
麦洛科菲长期致力于IT安全技术的推广与普及,我们更专业!我们的学员已经广泛就职于BAT360等各大IT互联网公司。详情请参考我们的 业界反馈 《周哥教IT.C语言深学活用》视频

我们的微信公众号,敬请关注