MFC 进程之间通讯之WM_COPYDATA消息
还是之前的两个基于对话框的MFC测试工程,名字分别为ShareMemoryTest和ShareMemoryTest2
在ShareMemoryTest工程中的按钮响应函数添加如下代码:
void CShareMemoryTestDlg::OnBnClickedOk() { // TODO: Add your control notification handler code here //CDialogEx::OnOK(); HWND receiveWindow = ::FindWindow(NULL, "ShareMemoryTest2"); if (receiveWindow == NULL) return; CString sendData = "message copy data"; COPYDATASTRUCT copyData = { 0 }; copyData.lpData = sendData.GetBuffer(); copyData.cbData = sendData.GetLength(); ::SendMessage(receiveWindow, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)©Data); sendData.ReleaseBuffer(); }
在ShareMemoryTest2工程中ShareMemoryTest2Dlg.h中添加
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
ShareMemoryTest2Dlg.cpp的BEGIN_MESSAGE_MAP(CShareMemoryTest2Dlg, CDialogEx)中添加
ON_WM_COPYDATA()
最后插入如下代码:
BOOL CShareMemoryTest2Dlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) { // TODO: Add your message handler code here and/or call default if (pCopyDataStruct->cbData > 0) { char recvData[256] = {0} ; strncpy(recvData, (char *)pCopyDataStruct->lpData, pCopyDataStruct->cbData); AfxMessageBox(recvData); } return CDialogEx::OnCopyData(pWnd, pCopyDataStruct); }
点击第一个进程的ok按钮,运行结果为:

浙公网安备 33010602011771号