//发送端struct Student { CString ID; CString Name;};
void CaaDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CString m_szData;
m_szData = "Hello";
HWND hWndRcv = ::FindWindow(NULL,"B"); if (hWndRcv == NULL) { AfxMessageBox("找不到接收窗口,发送不成功"); return ; } COPYDATASTRUCT cpd; cpd.dwData = 1;
cpd.cbData = m_szData.GetLength() + 1; cpd.lpData = (void*)m_szData.GetBuffer(cpd.cbData); ::SendMessage(hWndRcv,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd); m_szData.ReleaseBuffer(); AfxMessageBox(_T("发送成功"));
//CDialogEx::OnOK();
}void CaaDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 CString m_szID,m_szName; m_szID = "123"; m_szName = "成功"; Student *m_pStu= new Student(); m_pStu->ID=m_szID;
m_pStu->Name=m_szName; HWND hWndRcv = ::FindWindow(NULL,"B"); if (hWndRcv == NULL) { AfxMessageBox(_T("找不到接收窗口,发送不成功")); return ; } COPYDATASTRUCT cpd; cpd.dwData = 2; cpd.cbData = sizeof(m_pStu); cpd.lpData = (PVOID)m_pStu; ::SendMessage(hWndRcv,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd); delete m_pStu; AfxMessageBox("发送成功");
}//接收端BOOL CBDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString m_szData;
switch (pCopyDataStruct->dwData) { // 接收到的是CString类型 case 1:
MessageBox((LPCSTR)(pCopyDataStruct->lpData)); break; case 2:
CString id,name; CString str,dd; Student* pStu = (Student*)(pCopyDataStruct->lpData); id = pStu->ID; name = pStu->Name; dd.Format("ID=%s,name=%s",id,name);
MessageBox(dd);
}
return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}接收数据类型1没问题,正常显示hello,但是接收结构体的时候是乱码~
我感觉是不是我在这里
cpd.cbData = sizeof(m_pStu);
取的结构体长度有问题?我没有用Unicode~~
void CaaDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CString m_szData;
m_szData = "Hello";
HWND hWndRcv = ::FindWindow(NULL,"B"); if (hWndRcv == NULL) { AfxMessageBox("找不到接收窗口,发送不成功"); return ; } COPYDATASTRUCT cpd; cpd.dwData = 1;
cpd.cbData = m_szData.GetLength() + 1; cpd.lpData = (void*)m_szData.GetBuffer(cpd.cbData); ::SendMessage(hWndRcv,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd); m_szData.ReleaseBuffer(); AfxMessageBox(_T("发送成功"));
//CDialogEx::OnOK();
}void CaaDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 CString m_szID,m_szName; m_szID = "123"; m_szName = "成功"; Student *m_pStu= new Student(); m_pStu->ID=m_szID;
m_pStu->Name=m_szName; HWND hWndRcv = ::FindWindow(NULL,"B"); if (hWndRcv == NULL) { AfxMessageBox(_T("找不到接收窗口,发送不成功")); return ; } COPYDATASTRUCT cpd; cpd.dwData = 2; cpd.cbData = sizeof(m_pStu); cpd.lpData = (PVOID)m_pStu; ::SendMessage(hWndRcv,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd); delete m_pStu; AfxMessageBox("发送成功");
}//接收端BOOL CBDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString m_szData;
switch (pCopyDataStruct->dwData) { // 接收到的是CString类型 case 1:
MessageBox((LPCSTR)(pCopyDataStruct->lpData)); break; case 2:
CString id,name; CString str,dd; Student* pStu = (Student*)(pCopyDataStruct->lpData); id = pStu->ID; name = pStu->Name; dd.Format("ID=%s,name=%s",id,name);
MessageBox(dd);
}
return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}接收数据类型1没问题,正常显示hello,但是接收结构体的时候是乱码~
我感觉是不是我在这里
cpd.cbData = sizeof(m_pStu);
取的结构体长度有问题?我没有用Unicode~~
解决方案 »
- 怎么滚动条松开鼠标才触发事件?
- CRect提问
- 求教一个多线程的问题(急)!!
- 在VC中怎样从一个接口读或写数据?用哪个函数,包含哪个头文件?
- 奇怪的问题,CFile::Read会偷偷修改变量?!
- 请问哪里可以下载游戏开发方面的书籍
- 我最近想学C++,但不知道要用VC++好呢,还是用C++Buider好?
- 急救:输入法hook在word中记录不了在输入法下输入的标点符号问题
- 怎么用SetDIBitsToDevice将图像显示到对话框程序
- 如何通过网络播放和接收DVD (MPEG-4格式的)视频流????????
- VisualEleven和各位高手,我把代码贴出来了
- pDC->SetBkMode(TRANSPARENT); 设置控件背景色透明的问题
这句确实是错误的。
cpd.cbData = m_pStu->ID.GetLength()+m_pStu->Name.GetLength();
但是ID=123能正常显示,name=成功却还是乱码
我把获取结构体长度cpd.cbData = sizeof(m_pStu);改成cpd.cbData = sizeof(m_pStu)+11;
就都能正常显示了,我没有用Unicode,sizeof也不能获取到结构体正确的长度吗?