中声明宏
IMPLEMENT_DYNAMIC(CChatSocket, CSocket)。
另外还要在该类中加入成员变量CChatClientDoc* m_pDoc,它是与CChatSocket 关联的
文档类,很多数据处理工作在文档类中完成。
为该类增加一个新的构造函数CChatSocket(CChatClientDoc* pDoc),代码如下:
CChatSocket::CChatSocket(CChatClientDoc* pDoc)
{
m_pDoc = pDoc;
}
重载OnReceive()函数virtual void OnReceive(int nErrorCode),代码如下:
void CChatSocket::OnReceive(int nErrorCode)
{
//调用CSocket 的OnReceive 函数
CSocket::OnReceive(nErrorCode);
//其余工作jiāo给文档类处理
m_pDoc->ProcessReceive();
}
其中,ProcessReceive()函数是CChatClientDoc 类的一个成员函数,在后面将会介绍它的
具体实现。
最后,在文件“ChatSocket.h”的类定义外面加入类声明class CChatClientDoc,在文件
“ChatSocket.cpp”的头部加入语句#include "ChatClientDoc.h"。
至此,CchatSocket 类创建完毕。
4.创建登录对话框
通过登录对话框,用户可以登录到服务器,该对话框如图11-11 所示。其中,对话框的
ID 为IDD_LOGDLG,3 个Edit 控件的ID 依次为IDC_SERVER、IDC_PORT 和IDC_NAME。
为对话框新建一个类CLogDlg,对应3 个控件,为其添加3 个成员变量,即CString m_Server、
int m_Port 和CString m_Ncom,并将m_Port 初始化为2000。
图11-11 登录对话框
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·314·
然后,在菜单栏中为其新建一个菜单项,当单击该菜单项时,就会弹出登录对话框。为
了方便,可以再建一菜单项,用于断开连接,如图11-12 所示。
图11-12 登录对话框对应菜单栏
其中,连接菜单项的ID 为ID_CONNECT,断开菜单项的ID 为ID_DISCONNECT。
5.实现CChatClientDoc 类
同服务器端的实现一样,客户端大量的工作都是在CChatClientDoc 类中实现的。在开始
编写代码前,首先在文件“ChatClientDoc.h”中CChatClientDoc 类定义的前面加入如下的类
声明语句:
class CChatSocket;
class CMs