关于孙鑫老师的视频 第15课中最后一个简单的聊天程序中的一个问题
在这个程序中,创建了一个现场专门用来接收消息。接收消息的函数为
DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;
HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;
//这里他是定义了一个结构体 把socket 和 对话框的句柄封装起来一起传进来
delete lpParameter; //视频讲述时,遗忘了释放内存的操作。sunxin
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
char recvBuf[200];
char tempBuf[300];
int retval;
while(TRUE)
{
retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);
if(SOCKET_ERROR==retval)
break;
sprintf(tempBuf,"%s说: %s",inet_ntoa(addrFrom.sin_addr),recvBuf);
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);
}
return 0;
}
问题 :1 既然对话框的句柄已经知道了。。为什么不直接用hwnd->SetDlgItemText()来设置编辑框的内容 而是用postMessage传递消息给对话框,然后用对话框的消息响应函数来设置编辑框的内容?
2 线程函数的标准形式 MSDN给出的如下
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
);
请问 是不是用户只能改变函数名? 参数和返回值都必须和上面的一致?
因为,我把参数的名字改成了lpParam 然后在函数中 delete lpParam 就报错。。这是为什么呢?
注:这个函数是dialog类的静态成员函数!
可能问题描述的不清楚,希望有看过孙鑫老师的深入详解的人能帮助帮助。。。
3qverymuch