程式間通訊的WM_COPYDA他的使用

weixin_34015860發表於2019-01-08

http://blog.csdn.net/ao929929fei/article/details/6316174

 

接收資料的一方

ON_WM_COPYDATA()

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

程式碼片段:

 

[cpp] view plaincopy
 
  1. BOOL CClientDemoDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)  
  2. {  
  3.     if (pCopyDataStruct != NULL)  
  4.     {  
  5.         LPCTSTR pszText = (LPCTSTR)(pCopyDataStruct->lpData);  
  6.         DWORD dwLength = (DWORD)(pCopyDataStruct->cbData);  
  7.         TCHAR szRecvText[1024] = {0};  
  8.         memcpy(szRecvText, pszText, dwLength);  
  9.         MessageBox(szRecvText, _T("Test"), MB_OK);  
  10.     }  
  11.   
  12.     return CDialog::OnCopyData(pWnd, pCopyDataStruct);  
  13. }  

 

 

傳送資料的一方

程式碼片段:

 

[cpp] view plaincopy
 
  1. CString strWindowTitle =  _T("ClientDemo");  
  2.     CString strDataToSend = _T("Hello, Everyone fsdfsdfsdfdsfds,this is a test demo!");  
  3.   
  4.     HWND hOtherWnd = ::FindWindow(NULL, strWindowTitle.GetBuffer(0));  
  5.     if (hOtherWnd != NULL && ::IsWindow(hOtherWnd))  
  6.     {  
  7.         COPYDATASTRUCT cpd;  
  8.         cpd.dwData = 0;  
  9.         cpd.cbData = strDataToSend.GetLength() * sizeof(TCHAR);  
  10.         cpd.lpData = (void*)strDataToSend.GetBuffer(0);  
  11.         HRESULT hResult = ::SendMessage(hOtherWnd, WM_COPYDATA, (WPARAM)(AfxGetApp()->m_pMainWnd), (LPARAM)&cpd);  
  12.         strDataToSend.ReleaseBuffer();  
  13.     }  

OK了,就這麼簡單

 

WM_COPYDATA訊息主要目的是允許在程式間傳遞少量只讀資料。SDK文件推薦使用者使用SendMessage()函式,接收方在資料複製完成前不返回,這樣傳送方就不可能刪除和修改資料。

 

 

相關文章