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;

}

 

posted on 2012-12-05 17:55  理查德.张  阅读(309)  评论(0)    收藏  举报