1.新建Send基于对话框工程。添加按钮,标题改为“发送”。
2.找到对话框头文件,定义结构体。
typedef struct{
char Name[20];
UINT Age;
}Student;
3.新建Receive基于对话框工程。
找到对话框头文件。定义同样的结构体
typedef struct{
char Name[20];
UINT Age;
}Student;
4.双击发送按钮,添加代码
HWND REC=::FindWindow(NULL,"Receive");
if(REC==NULL)
{
::AfxMessageBox("没有找到该窗口");
return;
}
static Student a;
strcpy(a.Name,"dfsag");
a.Age=12;
static COPYDATASTRUCT cpd;
cpd.lpData = &a;
cpd.cbData = sizeof(a);
//pWnd->SendMessage(WM_COPYDATA,NULL,(LPARAM)&cpd);
::SendMessage(REC,WM_COPYDATA,NULL,(LPARAM)&cpd);
5.在接收对话框类向导中,添加 消息映射WM_COPYDATA
编辑代码
Student a;
CString b;
memcpy(&a,pCopyDataStruct->lpData,sizeof(a));
b.Format("%s",a.Name);
::AfxMessageBox(b);
char c[10];
::itoa(a.Age,c,10);//整形转成字符串。
::AfxMessageBox(c);
6.同时运行两个程序。 点击发送,Receive可以收到Send发来的结构体信息。
心得:COPYDATASTRUCT是保存Student结构体的地址在lpData里,cbData保存了数据大小。sendmessage给Receive窗口发送消息,使它响应WM_COPYDATA映射,接收COPYDATASTRUCT中的内容,再通过地址取出。