在对话框类里如何样创建线程接受服务器数据到对话框变量

求助:在对话框类里怎么样创建线程接受服务器数据到对话框变量?
DWORD WINAPI receive(LPVOID pParam)  
{  
CEchoClientDlg *pDlg = (CEchoClientDlg *)pParam;  
while(1){
  char buf[LINELEN]; /* buffer for one line of text */
  int cc; /* recv character count */
  cc = recv(msock, buf, LINELEN, 0);
  buf[cc] = '\0'; /* ensure null-termination */
  pDlg->m_ctrlEcho.SetWindowText(pDlg->m_strEcho + "\r\n" + buf);
 
  int line=pDlg->m_ctrlEcho.GetLineCount();
  pDlg->m_ctrlEcho.LineScroll(line); // AutoScroll To The End Of Text
}
}

void CEchoClientDlg::OnOK() 
{
WSADATA wsadata;
char loginbuf[BUFSIZE];
  CConnect dlg;
int nResponse = dlg.DoModal();
m_ctrlEcho.FmtLines(TRUE);
if(nResponse==IDOK){
WSAStartup(WSVERS, &wsadata);
msock = connectsock(dlg.m_strServer,dlg.m_strService,dlg.m_strProtocol);
if(msock==0)
m_strEcho = "连接失败";
else
m_strEcho = "连接成功";
UpdateData(FALSE);

  m_strName = dlg.m_nstrUser;
send(msock, dlg.m_nstrUser, strlen(dlg.m_nstrUser),0);
int cc = recv(msock,loginbuf,BUFSIZE,0);
loginbuf[cc] = '\0';
CString s = loginbuf;

if(s == "您已登录"){
  MessageBox("此用户已登录");
closesocket(msock);
WSACleanup();
CDialog::OnCancel();
}

else{
  m_strClientAddr = s;
m_strEcho = m_strEcho+"\r\n"+"登录成功";
  m_ctrlEcho.SetWindowText(m_strEcho + "\r\n" + s);
UpdateData(FALSE);
  AfxBeginThread(receive,this); //创建线程在这里,就是这里错了,传递this对吗?
}//else  

}//if
// CDialog::OnOK();
}


问题一:请问为什么报错error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned long (void *)'这个错是什么,怎么改?

问题二:如果用_beginthread和createthread怎么写函数声明几recerve函数声明,receive函数是类外定义的,请问要做线程调用的函数应该怎么样声明及设置参数?

求救!!!

------解决方案--------------------
问题1 将 DWORD WINAPI 改成 UINT
问题2:你那样申明就可以了啊 

DWORD dwID;
HANDLE hHandle = CreateThread(NULL,0,receive,this,0,&dwID);
CloseHandle(hHandle);