Re: WM_COPYDATA between two applications
Hi Anders,
u cant copy data from one process to another. Inprocess
u can handel WM_COPYDATA so:
typedef struct ViewClick
{
int PosX;
int PosY;
int FocusId;
double PixelUnit;
CLICKEVENT Event;
}VIEWCLICK;
void CBitmapView::SendCopyData(CLICKEVENT Event,CPoint pt /*=CPoint(0,0)*/)
{
if(!m_pParentWnd || !m_pParentWnd->m_hWnd)
return;
CCrossFocus *pHair = m_gdiobj.GetFocus();
int id=-1;
if(pHair)
{
pt = pHair->GetFocus();
id = pHair->GetId();
}
m_vclick.PosX = pt.x;
m_vclick.PosY = pt.y;
m_vclick.FocusId = id;
m_vclick.PixelUnit = m_gdiobj.GetPixelUnits();
m_vclick.Event = Event;
m_pParentWnd->SendMessage(WM_COPYDATA,(WPARAM)(HWND) m_hWnd,(LPARAM)
(LPVOID) &m_MyCDS);
}
After send data u can handle it in your Dialog :
BOOL CCamInspectTestDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT*
pCopyDataStruct)
{
VIEWCLICK *pVclk=0;
if(pCopyDataStruct->dwData == VIEWCLICKMSG)
if(pCopyDataStruct->cbData == sizeof(VIEWCLICK))
if((pVclk = (VIEWCLICK *)pCopyDataStruct->lpData))
{
double cal(pVclk->PixelUnit);
CString str; str.Format("X(%0.4f):Y(%0.4f) Cal(%0.4f) Id(%d) Evt(%d)",
pVclk->PosX*cal,pVclk->PosY*cal,cal,pVclk->FocusId,pVclk->Event);
SetWindowText(str);
}
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
"Anders Eriksson" <andis59@gmail.com> schrieb im Newsbeitrag
news:1s37n3yj1am4g.dlg@ostling.com...
Hello,
I'm running VC++ 2005.
I have two program and want to exchange some data, a string, between them.
In the sender program I have this function:
BOOL CFSGClientDlg::SendCommand(CString command)
{
COPYDATASTRUCT cds;
LRESULT rc;
TCHAR *buf;
buf = new TCHAR[MAX_COPY_LENGTH];
memset(buf,'\0',MAX_COPY_LENGTH);
_tcscpy_s(buf,MAX_COPY_LENGTH,sOrderno.GetBuffer());
sOrderno.ReleaseBuffer();
cds.dwData = 0;
cds.cbData = sOrderno.GetLength()+1;
cds.lpData = (void*)buf;
rc = m_pSCMLaserCWnd->SendMessage(WM_COPYDATA,
(WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(),
(LPARAM)&cds);
if (rc ==NULL)
{
DWORD errcode = GetLastError();
return false;
} // if (rc==NULL)
return true;
}
And in the receiver program I have this:
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
CString sData=(TCHAR*)(pCopyDataStruct->lpData);
... doing stuff with sData...
return CFrameWnd::OnCopyData(pWnd, pCopyDataStruct);
}
I can see that the string I send is OK, but when I get to the receiving
part I get a couple of characters correkt and then just rubbish...
What have I done wrong?
// Anders
--
English is not my first, or second, language
so anything strange, or insulting, is due to
the translation.
Please correct me so I may improve my English!