谁能给我讲解一下这个函数呀

iuhxq 2004-07-05 02:13:21
LRESULT CPublicNetSoftDlg::OnAccept(WPARAM wParam,LPARAM lParam)
{//×Ô¶¨Òå½ÓÊÕ¿Í»§»úÇëÇóµÄÏûÏ¢ ON_MESSAGE(WM_CLIENT_ACCEPT,OnAccept)
if (WSAGETSELECTERROR(lParam))
{
list.InsertString(0,"Error detected on entry into OnServerAccept.");
return 0L;
}

if(WSAGETSELECTEVENT(lParam) == FD_ACCEPT)//Èç¹û
{
Client = accept(ServerSocket,(LPSOCKADDR)&m_sockServerAddr,0);

if (Client == INVALID_SOCKET)
{
list.InsertString(0,"Server socket failed to accept connection.");
return 0L;
}

WSAAsyncSelect(Client,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);

IsTrue = TRUE;
}

list.InsertString(0,"连接");

return 0L;
}

1。WPARAM wParam,LPARAM lParam这两个参数什么意思?
2。这个函数在#define WM_CLIENT_ACCEPT WM_USER+101发生时会调用,他是怎么发生这个事件的。是SOCKET对象产生的么?
3。WSAAsyncSelect(Client,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);这句会把FD_READ和FD_CLOSE转化成WM_CLIENT_READCLOSE事件么?怎么转化的?
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
PiggyXP 2004-07-05
  • 打赏
  • 举报
回复
呵呵呵,楼主还是不理解WSAAsyncSelect结构,而且还需要补习一下MFC里面自定义消息的相关知识^_^

我来详细的给你解释一下吧^_^


WSAAsyncSelect(Client,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);

这句话的意思是说,在socket接收到FD_READ|FD_CLOSE两个事件的时候,就会把你自定义的这个消息 WM_CLIENT_READCLOSE 发送到 m_hWnd 句柄的窗口上去

#define WM_CLIENT_ACCEPT WM_USER+101 这句就是你自定义的消息罗

LRESULT CPublicNetSoftDlg::OnAccept(WPARAM wParam,LPARAM lParam)
// 这句就是响应WM_CLIENT_ACCEPT自定义消息的响应函数
// WPARAM wParam,LPARAM lParam参数是固定格式,所有的自定义的消息响应函数都是这么个套路的呵呵

^_^
自由的风 2004-07-05
  • 打赏
  • 举报
回复
3:WM_CLIENT_ACCEPT是消息,这个消息只对FD_READ|FD_CLOSE这两个事件感兴趣,其它事件不管
2:由上面可以知道只要socket上有FD_READ FD_CLOSE事件发生,就会触发WM_CLIENT_ACCEPT消息
快乐鹦鹉 2004-07-05
  • 打赏
  • 举报
回复
1.这是消息的两个参数,用于传递信息。WPARAM和LPARAM实际都是int型。因此即可以表达一个普通的整数,也可以表达一个指针地址
2。应该是客户端检测到有数据来到时就会自动激活的一个事件
3。不会吧?
lishan2002 2004-07-05
  • 打赏
  • 举报
回复
16位系统:
WPARAM(Word parameter)
LPARAM(Long parameter)
32位系统:
WPARAM 被定义为UINT型
LPARAM 被定义为LONG型

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧