谁能说一下WM_COPYDATA的接收的具体实现,,比如 
我发送的是: 
UINT   ra[2]; 
ra[0]=65; 
ra[1]=66; 
::SendMessage(GetDlgJyHwnd(),WM_COPYDATA,0,(LPARAM)ra);   
m_JyDlg.ShowWindow(SW_SHOW); 
..... 
那我的实现: 
BOOL   Cxxx::OnCopyData(CWnd*   pWnd,   COPYDATASTRUCT*   pCopyDataStruct)   

//   TODO:   Add   your   message   handler   code   here   and/or   call   default ..... 
return   CDialog::OnCopyData(pWnd,   pCopyDataStruct); 

该如何写... 

解决方案 »

  1.   

    简单有手写一下:
    发送:
    UINT ra[2]; // size 8
    ra[0]=65;   
    ra[1]=66;   COPYDATASTRUCT cd;
    cd.cbData = 8;
    cd.lpData = ra; // ptrSendMessage(hTarget, WM_COPYDATA, (WPARAM)hThis, (LPARAM)&cd);接收:BOOL Cxxx::OnCopyData(CWnd*       pWnd,       COPYDATASTRUCT*       pCopyDataStruct)       
    {   
    //       TODO:       Add       your       message       handler       code       here       and/or       call       default   UINT* ra = (UINT*) (pCopyDataStruct->cd.lpData);
    // 安全的做法是根据 cbData 来,我省略了
    UINT a = ra[0];
    UINT a = ra[1];
       return       CDialog::OnCopyData(pWnd,       pCopyDataStruct);   
    }
      

  2.   


    COPYDATASTRUCT cds;
    cds.dwData = 0;
    cds.cbData = sizeof(ra);
    cds.lpData = ra;
    ::SendMessage(GetDlgJyHwnd(), WM_COPYDATA, (WPARAM)this->GetSafeHwnd(), (LPARAM)&cds);BOOL Cxxx::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
    {
      size_t count = pCopyDataStruct->cbData/sizeof(UINT); // 数组个数
      UINT* pra = (UINT*)pCopyDataStruct->lpData; // 数组指针
      // 处理数据
      ...
      return CDialog::OnCopyData(pWnd, pCopyDataStruct);
    }
      

  3.   

    谢谢r_swordsman 的解答,,是个好方法,,至于jameshooo 的方法我没试过,,
    到此为止呢,,问题已经被解决了,,
    现在呢,,我想问一个题外的问题,,,楼上两位的"C/C++code"的框是怎么出来的呀,,
    是不是管理员的身份的人才有这个特别的框的呀??
      

  4.   

    回复/发帖的时候...文本框上面是不是有一排图标?..
    点第7个....或者自己写UBB: http://forum.csdn.net/help/ubb.html

    例如
    [code=C#]using System;
    [/code]
      

  5.   

    回复/发帖的时候...文本框上面是不是有一排图标?..
    点第7个....或者自己写UBB: 
    例如using System;
      

  6.   

    C 的独特之处就是指针的应用,所以楼主只需要把你要传递的东西写成一个结构体就可以通过指针传递了,这样的话无论是什么类型的传递参数只需要把它转换成那种类型就OK了,    接收到在强制类型转换为你的结构体类型
      

  7.   

    郁闷还得在回答一次。
    一种方法
    SetWindowLongPtr(hWnd,GWLP_USERDATA,tagPtr/*你的结构指针*/);
    接收的时候
    GetWindowLongPtr(hWnd,GWLP_USERDATA,&tagPtr/*你的指针*/)
    第二种方法
    COPYDATASTRUCT st;
    DWORD *sp = (DWORD*)malloc(sizeof(DWORD))
    st.dwData = NULL;
    st.cbData = sizeof(DWORD);
    st.lpData = sp;
    SendMessage(hWnd/*目标窗体用于接收*/,WM_COPYDATA,(WPARAM)HWND/*发送窗体*/,(LPARAM)&st);
    在不明白我也没法了