消息作用:
在进程间共享数据(内部通过创建内存映射文件)消息介绍:
需要用到的数据结构/类型:typedef struct tagCOPYDATASTRUCT { ULONG_PTR dwData; DWORD cbData; PVOID lpData;} COPYDATASTRUCT, *PCOPYDATASTRUCT;结构体参数说明:
dwData(ULONG) 保存一个数值, 可以用来作标志等 lpData(void*) 待发送的数据的起始地址(可以为NULL) cbData(DWORD) 待发送的数据的长度消息的参数: hWnd: 接收数据的窗口的句柄 wParam: 传送该数据的窗口句柄(NULL也无所谓) lParam: COPYDATASTRUCT类型变量的地址使用示例:COPYDATASTRUCT cds; char msg[] = "女孩不哭"; cds.dwData = 0; cds.lpData = msg; cds.cbData = strlen(msg)+1; //字符串请记得把'\0'加上, 不然就错了, 这里是ANSI字符串 SendMessage(FindWindow("nbsg_class", NULL), WM_COPYDATA, 0, (LPARAM)&cds);
注意:如果要发送的是一个CString类型的字符串,那么可以这么做
CString str = _T("女孩不哭");char* msg = str.GetBuffer(0);
这样就可以转化为 char*类型了
--------------------------------------------
接收端对该消息的一种可能处理:BOOL CxuanzeDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct){ // TODO: 在此添加消息处理程序代码和/或调用默认值 COPYDATASTRUCT* pCDS = (COPYDATASTRUCT*)pCopyDataStruct; CString str((char*)pCDS->lpData); str.Format(_T("%s 标志:%d"), str, pCDS->dwData); AfxMessageBox(str); return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);}
在这个消息中,有一个标志dwData 这个数据是一个ULONG_PTR类型,无符号长整数,可以用作数据的标志.这样不同的标志,可以将传递的数据用作不同的用途!