我的问题是:在登录成功之后,怎么让弹出来的用户操作界面窗口能够接收到服务器端发的消息
急啊,希望大牛们帮助我!一旦成功,再加30分!!!!在线等!
onXXX函数应该在哪申明呢,我是每个窗口都有一个onXXX函数,这样可以吗?
原本的窗口并没有关闭,只是在后台而已
额,OnXXX是指重载的OnReceive,OnAccept。当服务器有消息发送过来时,通信模块通过OnReceive通知socket有消息可以接收,所以在OnReceive中进行操作就行了。
追问我是希望能在窗口里映射消息,响应消息,应该怎么做呢
追答之前不对,乱了。
在登录窗口自定义一个消息,假如为UM_SVR_LOGIN。
当服务器发送消息过来了,OnReceive将会被调用并通知主窗口有消息可接收。(也可以让OnReceive直接通知登录窗口,但这就需要CConnectSoc中保留登录窗口的指针,程序模块的独立性就差了)
(一)----------------------------------------------------------------
主窗口接收消息,处理服务器的消息的内容,然后将结果发送给登录窗口。
logindlg.PostMessage(UM_SVR_LOGIN,结果1,结果2)。
登录窗口中的响应函数对发送过来的结果进行处理就行了。
(二)--------------------------------------------------------------
也可以直接从主窗口发送套接字对象的指针,让登录窗口自己去处理。
主窗口的OnReceive中:
logindlg.PostMessage(UM_SVR_LOGIN,&m_sock);
登录窗口的响应函数中:
CConnectSoc* pSock=(CConnectSoc*)wParam;
要怎么通知所有窗口收到消息了呢?
还有logindlg并没有postmessage这个函数啊
用自定义消息,这个你应该会的。
比如在登录窗口中定义了消息UM_SVR_LOGIN。
那么在主窗口中:logdlg.PostMessage(UM_SVR_LOGIN);就发送了消息UM_SVR_LOGIN给登录窗口,登录窗口收到后,响应函数(假设是OnSvrLogin)OnSvrLogin就会被执行,也就是响应了这个消息。
所有窗口都要收到的话,只能挨个窗口发了(可能是我技术不够,只想到这个办法)。
那怎么在onreceive里把消息传给当前活动窗口呢?而且登录窗口弹出后,主窗口在后台还能收到消息吗?
在onreceive中:AfxGetMainWnd()->SendMessage(WM_NEWMESSAGE, (WPARAM)&rece);用这句来通知
能不能改造下通知当前窗口呢?
主窗口可以收到消息并且响应消息。
AfxGetMainWnd()->SendMessage(WM_NEWMESSAGE, (WPARAM)&rece);
rece是主窗口传递给CConnectSoc的吗?rece是主窗口中定义的套接字吧。OnReceive中随便发送个消息告诉主窗口有消息可接收就行了,主窗口知道后,是接收消息处理,还是直接发送套接字对象指针给登录窗口就随便了。
这是客户端的socket
然后再客户端的主窗口内定义了:LRESULT OnNewMessage(WPARAM wParam, LPARAM);来获取消息
可是当我在弹出窗口内定义了同样的LRESULT OnNewMessage(WPARAM wParam, LPARAM);时,却无法得到消息
你要是对mfc socket很在行的话,可以把代码发给你看看
我不在行,只是之前用它做过一些程序,也做过你说的不同窗口来接收的情况。gwlprogrammer@hotmail.com