1、::SendMessage 这是发送消息且挂起,坐等消息处理结束,方能返回值。但发送带数据消息时由于数据比较长,接收不能正确获得,导致程序获取数据失败不能正常执行,处于这个原因,找到了一个发送数据拷贝事件的宏WM_COPYDATA,就当起了长数据传送到目的句柄(窗口句柄)职责。
发送消息代码
COPYDATASTRUCT cpd; // 给COPYDATASTRUCT结构赋值
cpd.dwData = 0;
cpd.cbData = sProjectName.GetLength();
cpd.lpData = (void*)sProjectName.GetBuffer(cpd.cbData);
long lret = ::SendMessage(pMainFrame->m_hWnd, WM_COPYDATA, 0, (LPARAM)&cpd);
接收消息代码
//.h 函数声明
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
//.cpp 函数定义
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//消息装载
ON_WM_COPYDATA()
END_MESSAGE_MAP()
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString msg;
msg = (LPSTR)pCopyDataStruct->lpData;
msg = msg.Left(pCopyDataStruct->cbData);
/*CString csMsg;
csMsg.Format("成功接到信息 %s", msg);
MessageBox(csMsg);*/
return CFrameWnd::OnCopyData(pWnd, pCopyDataStruct);
}