《VC语言6.0程序设计从入门到精通》第109章


(2 )封装消息类
本程序中为消息建立一个类 CMsg,它的父类是 CObject 。在“ChatServer classes ”上单 
击右键,在弹出的对话框中选择“New Class ”,如图 11…4 所示。在弹出的“New Class ”对话 
框中的“Class type ”下拉列表中选择“Generic Class ”项,在“Name ”栏中填写类名称 CMsg, 
在“Derived From ”栏中填写其父类名称 CObject,如图 11…5 所示。单击“OK ”按钮,弹出 
提示对话框,单击“确定”即可。
图 11…4 为工程新建一个类 图 11…5 新建消息类 CMsg
在类CMsg 的定义(文件“Msg。h ”)中加入宏DECLARE_DYNCREATE(CMsg) ,声明此 
宏可以使得由CObject继承来的类在程序运行的时候能够动态地创建。然后为其加入成员变量 
和成员函数,分别如表11…5和表11…6所示。
·289 ·
…………………………………………………………Page 301……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
表 11…5 CMsg 类成员变量及其说明
成员变量 说明
CString m_strText 消息的内容
BOOL m_bClose 连接是否关闭
UINT code 消息的种类
表 11…6 CMsg 类成员函数及其说明
成员函数 说明
void Init() 对成员变量进行初始化
virtual void Serialize(CArchive &ar) 进行数据的发送和接收
完成消息类的定义后,要在文件“Msg。cpp ”中实现此类。首先要声明另外一个宏 
IMPLEMENT_DYNCREATE(CMsg; CObject) ,它是与宏 DECLARE_DYNCREATE 相对应的 
在类实现时声明的宏。然后为其添加代码。在类的构造函数中对成员变量进行初始化,代码 
如下:
CMsg::CMsg()

Init();

函数 Init()代码如下:
void CMsg::Init()

code = 0;
m_bClose = FALSE;
m_strText = _T(〃〃);

最后是重载的串行化函数的代码如下:
void CMsg::Serialize(CArchive& ar)

//读入
if (ar。IsStoring())

ar 》 m_strText;
·290 ·
…………………………………………………………Page 302……………………………………………………………
第 11 章 网络编程
ar 》》 (UINT)code;


(3 )编写客户端信息界面
封装好消息类后,接下来要对界面编写代码。在上小节的设计中已经说明,服务器端应 
有两个窗口,一个用来显示各客户端的信息,另一个用来显示聊天信息。
首先编写显示各客户端信息的界面。与创建消息类的步骤一样,为工程新建一个类,取 
名为 CChattersListView,在“Class type ”下拉列表中选择“MFC Class ”项,在“Base class ” 
下拉列表中选择“ClistView ”作为其父类,设置完成后单击“OK ”按钮即可,如图 11…6 所 
示。
图 11…6 新建类 CChattersListView
然后为该类添加成员变量 int m_Row,它记录列表视图的当前行的位置,在类的构造函 
数中将其初始化为 0 。
接 下 来 添 加 各 成 员 函 数 并 为 其 编 写 代 码 。 首 先 重 载 函 数 virtual BOOL
PreCreateWindow(CREATESTRUCT& cs) ,通过此函数可以设定窗口风格。代码如下:
BOOL CChattersListView::PreCreateWindow(CREATESTRUCT& cs)

//设定风格为详细报表显示
cs。style |= LVS_REPORT;
return CListView::PreCreateWindow(cs);

接着在窗口创建时进行初始化。打开“ClassWizard ”对话框,在“Class name ”下拉列 
表中选择 CChattersListView,在“Message ”列表中选择 WM_CREATE (如图11…7 所示)。 
然后依次单击“Add Function ”按钮和“Edit Code ”按钮,定位到 OnCreate()函数,添加如下 
代码:
·291 ·
…………………………………………………………Page 303……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
图 11…7 为 WM_CREATE 消息添加响应函数
int CChattersListView::OnCreate(LPCREATESTRUCT lpCreateStruct)

if (CListView::OnCreate(lpCreateStruct) == …1)
return …1;
// TODO: Add your specialized creation code here
CRect rect;
GetClientRect(&rect);
GetListCtrl()。InsertColumn(0; 〃用户名〃 );
GetListCtrl()。InsertColumn(1; 〃登录时间〃);
GetListCtrl()。InsertColumn(2; 〃地址〃);
return 0;

当窗口大小变化时,会激发 WM_SIZE 消息。利用上述办法可以为此消息编写响应函数, 
代码如下:
void CChattersListView::OnSize(UINT nType; int cx; int cy)

CListView::OnSize(nType; cx; cy);
// TODO: Add your message handler code here
GetListCtrl()。SetColumnWidth(0; cx
小说推荐
返回首页返回目录