为局域网聊天软件的实现奠定了理论基础。
2 界面实现
因为这个程序其实并不设计什么算法性的代码,连数据查找我用的貌似也是 STL 的
find 方法,所以对于程序的网络代码我并不想将太多,意义不大,等会介绍下核心类的接
口就算完事了,先介绍界面的设计。
看着
win 低画质的界面,顿时觉得,Win7 下高画质的界面好多啦~
首先,主界面中有 2 个 Edit 编辑控件,一个 List 控件,两个按钮。在 list 控件中包含了
两个列,目前仅仅对第一个
IPAddr 进行了使用。在线设备在 list 控件中会显示出来其 IP 地
址。
目前仅做了双击显示出来的在线项弹出聊天对话框的功能,其余尚未添加。而且按下
空格和
Enter 键会直接退出程序。这个问题属于还未处理好的键盘消息响应。
(
1) 当有数据报到来并且完成接收后如何通知子窗口并且显示出来?
CLANChat 构造函数的参数为一个 CDialog 的指针。而在主对话框程序中,作为显示的
Dialog 对话框派生类包含一个 CLANChat 的对象。在对话框对象启动的时候,在其构造函数
的参数列表中为
CLANChat 对象传入 this 指针,用于其初始化。这样对于到来的消息,在未
弹出窗口的情况下,就能够根据对话框窗口的句柄使用
postmessage 函数将消息派发出去。
同时 CLANChat 类中的在线列表是一个 vector 模板,作为其类型参数的是专门设计的
OnLineNode 类,其中包含了指向字聊天对话框窗口的指针。
1
class
OnLineNode
2
{
3
public
:
4
//当年一个小小结构体,如今都需要做构造函数了……
5
OnLineNode();
6
//结构体和类在添加数据上确实很有优势~
7
SOCKET sClient;
//I like this name
8
sockaddr_in sa_in;
//保存和客户端的 IP 信息
9
vector<CString> vec_str_ChatHistory;
//在这聊天记录也做了,全职保姆……
10
CDialog * pDlg;
//指向与自己相绑定的对话框对象。
11
//用于支持 STL 方法