现在的位置: 首页 > 综合 > 正文

在PostMessage或SendMessage中通过WPARAM或者LPARAM将数组传递给消息处理函数

2018年02月08日 ⁄ 综合 ⁄ 共 1146字 ⁄ 字号 评论关闭

(1)在::PostMessage(HWND,UINT,WPARAM,LPARAM)或::SendMessage(HWND,UINT,WPARAM,LPARAM)中通过WPARAM   wParam或者LPARAM   lParam将数组传递给消息处理函数; 

(2)在消息处理函数中,通过memcpy( void *dest, const void *src, size_t count )将数组数据取出。

下面是示例代码:

  //接收数据线程函数,数据到达时发送消息
DWORD WINAPI CMutualTeachingDemoDlg::RecvThreadFun(LPVOID lp)
{
 CMutualTeachingDemoDlg *p = (CMutualTeachingDemoDlg *)lp;
 while (1)
 {
  int iRecvDataLength = 0;      
  BYTE recvBuf[RECV_BUFFER_LENGTH];
  memset(recvBuf, 0, RECV_BUFFER_LENGTH);
  iRecvDataLength = recv( p->sockClient, (char *)recvBuf, RECV_BUFFER_LENGTH, 0 );
  if ( iRecvDataLength > 0 )
  {
   ::SendMessage(p->m_hWnd, WM_RECV_DATA, (WPARAM)recvBuf, 0);
//   ::PostMessage(p->m_hWnd, WM_RECV_DATA, (WPARAM)recvBuf, 0);
  }

  Sleep(1);
 }
 return (DWORD)1;
}

//接收数据处理
LRESULT CMutualTeachingDemoDlg::OnRecvData(WPARAM wParam, LPARAM lParam)
{
 BYTE recvBuf[RECV_BUFFER_LENGTH];
 memset(recvBuf, 0, RECV_BUFFER_LENGTH);
 memcpy(recvBuf, (const void *)wParam, RECV_BUFFER_LENGTH);
 int iCmdType = 0; 
 iCmdType = recvBuf[3];      

 switch(iCmdType)
 {
 case 1:                      
  break;

 case 2:                       
  break;

 case 3:                       
  break;

 default:
  break;
 }

 return 0;
}

 

 

更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn

 

抱歉!评论已关闭.