一、介紹
Windows上MFC應用程序可使用WM_COPYDATA可以完成兩個進程之間的通訊。
當一個應用向另一個應用傳送數據時,發送方需調用SendMessage函數,參數是目的窗口的句柄、傳遞數據的起始地址、WM_COPYDATA消息。接收方只需響應WM_COPY DATA消息,雙方就實現了數據共享。
它在底層實際上是通過文件映射來實現的,缺點是靈活性不高,並且它只能用於Windows平台的單機環境下。
二、發送端界面與代碼示例
void CclientDlg::OnBnClickedButtonSend() { // TODO: 在此添加控件通知處理程序代碼 CString strMsg; GetDlgItem(IDC_EDIT_SendData)->GetWindowText(strMsg); CWnd* serverWnd = CWnd::FindWindow(NULL, L"server"); if (serverWnd) { COPYDATASTRUCT cpd; cpd.dwData = 0;//用戶定義的數據類型,可以用來作為發送標志 cpd.cbData = strMsg.GetLength() * sizeof(TCHAR);//數據大小,長度一定要滿足,否則數據傳輸不全 cpd.lpData = (void*)strMsg.GetBuffer(cpd.cbData); //數據指針 LRESULT copyDataResult = ::SendMessage(serverWnd->GetSafeHwnd(), WM_COPYDATA, NULL, (LPARAM)&cpd);//發送消息 strMsg.ReleaseBuffer(); } }
三、接收端界面與代碼示例
在對話框界面,右鍵對話框->屬性,選擇消息選項卡,添加WM_COPYDATA消息,如下圖
消息函數代碼如下:
BOOL CserverDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) { // TODO: 在此添加消息處理程序代碼和/或調用默認值 LPCTSTR lstrMsg = (LPCTSTR)(pCopyDataStruct->lpData); CString strMsg(lstrMsg); GetDlgItem(IDC_EDIT_ReceiveData)->SetWindowText(strMsg); return CDialogEx::OnCopyData(pWnd, pCopyDataStruct); }
四、效果與代碼下載
代碼下載地址: https://download.csdn.net/download/rcg714786690/12406356
參考鏈接:
https://blog.csdn.net/tercel_zhang/article/details/49056037
https://www.cnblogs.com/betterwgo/p/8441452.html