WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;//用户定义数据DWORD cbData;//数据大小
PVOID lpData;//指向数据的指针
}COPYDATASTRUCT;
该结构用来定义用户数据。
了解该结构体后,然后再发送方调用
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,hwnd指的是接收端的句柄,WM_COPYDATA对应的十六进制数为0x004A
wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构。
接收端重载ON_WM_COPYDATA消息映射函数:
在头文件中添加afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
添加消息映射:
源文件中BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间添加ON_WM_COPYDATA()
响应函数:
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
AfxMessageBox((LPCSTR)(pCopyDataStru