Delphi由于VCL控件资源很丰富,在设计界面时很容易设计出相当漂亮的界面效果,但其对计算机底层的操作支持却相当有限(像编写驱动之类的)。在底层设计上VC却是不二的选择,但是界面设计起来,却费时费力。通过使用CopyData消息来进行Delphi和VC之间的数据处理,就可以兼容二者的优点,达到最好的设计效果。同时程序又能更好模块化。下面就为大家简单介绍一下具体的操作过程。
http://www.cnblogs.com/Richard1981/articles/2803617.html 此篇中我讲述了在Delphi实现的过程。
接下来为大家讲一下在VC++的实现过程。
第一步:在工程头文件中,定义共享数据的存储格式:
typedef struct{
int id;
int len;
byte Buf[1024];
}__REC;
第二步:在工程头文件中的实现部分定义消息接收处理函数:
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
第三步:在工程源文件中添加CopyData消息处理:
BEGIN_MESSAGE_MAP(CVC_MessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_COPYDATA() //添加这个代码
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CVC_MessageDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
第三步:编写消息接收函数体:
BOOL CVC_MessageDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
__REC *rec; char ch[10];
rec=(__REC *)(pCopyDataStruct->lpData);
itoa((*rec).id,ch,10);
GetDlgItem(IDC_STATIC_TMP)->SetWindowText(ch);
return 0;
}
第四步:实现消息发送部分:
void CVC_MessageDlg::OnBnClickedButton1()
{
COPYDATASTRUCT cpd;
HWND hWndRcv;
__REC *PRec;
int i;
// TODO: 在此添加控件通知处理程序代码
hWndRcv= ::FindWindow(NULL,"Delphi消息发送和接收程序");
if (hWndRcv == NULL)
{
AfxMessageBox(_T("找不到接收窗口,发送不成功"));
return ;
}
PRec = new __REC();
(*PRec).id=2;
(*PRec).len=20;
for(i=0;i<20;i++) (*PRec).Buf[i]=i;
cpd.cbData = sizeof(__REC);
cpd.lpData = (PVOID)PRec;
::SendMessage(hWndRcv,WM_COPYDATA,0,(LPARAM)&cpd);
delete PRec;
}
浙公网安备 33010602011771号