5.手写一个聊天室(单聊、群聊、文件传输)

一、前言

鉴于很多人都想给聊天室添加单聊的功能,所以这里就再出一篇功能更全的聊天室

一直啃旧东西也没意思,所以本篇文章再给大家介绍一个新的窗口框架:WTL

本文的聊天室客户端将基于WTL进行开发,主要有三个程序:windows客户端windows服务器以及linux服务器

由于有两个不同平台的服务器,分别开发就太麻烦了,因此本文选择使用boost中的asio库进行跨平台开发。

二、前置知识点

1.相关文章

在学习本文前,你需要至少阅读以下四篇文章:

  1. 模板
  2. Boost asio库使用详解
  3. C++开源项目配置(vcpkg)
  4. Linux系统入门

其中第一点,是WTL的底层实现逻辑,不懂的话,后面用起来你可能就会觉得非常奇怪。

然后是第二点,由于我们的服务器必须能运行到windowslinux双平台,如果分别进行开发就太麻烦了,所以这里采用C++准标准库中的asio库进行跨平台开发。

即我们只需要写一份代码,就可以在多个平台直接编译运行

然后是第三点,因为我们需要用到第三方库,所以就必须得学会如何在自己的项目中使用第三方库。

但本文实际上并不需要,因为我直接提供了完整的项目解决方案,包括用到的WTL与boost第三方库,我也直接放在了项目中。

至于最后一点,则是为了让我们能够直接在VS中编译运行linux服务器。

2.WTL的基本使用流程

MFC一样,WTL也是一个图形框架,是由微软员工写出来的。

之所以出现WTL,主要还是因为MFC很笨重,不跨平台,闭源,而且似乎已经很多年没有更新过了

一个最简单的MFC程序,默认生成就有数兆大小,一旦使用MFC出现bug,排错就会非常麻烦,因为没有源码。

WTL就可以很好的解决这些问题,因为WTL是直接给我们提供框架源代码的,你可以任意修改、扩展里面的内容。

而且因为其小巧,其生成的文件非常小,本文完成的这个聊天室,最终生成的可执行文件只有160k

但缺点肯定也是有的,就是不跨平台,使用起来也较为麻烦。

不过我已经总结出了一套基本使用流程,所以不必过于担心,只要你会MFCWTL也能很快学会。

WTL很多函数接口都是直接模仿的MFC,所以如果你对WTL中的某个控件不知道怎么用,你就可以直接查询MFC的文档,可以点击这里查看官方MFC文档。

首先,我们需要建立一个桌面窗口空项目:

随便取个名字:

在这里插入图片描述

然后选择桌面应用程序,以及勾选空项目:

在这里插入图片描述

如果用的vcpkg,那么下面两个配置的步骤就不需要了。

这样我们的客户端项目就创建好了,现在你就可以将WTL源代码复制进这个项目文件夹中:

在这里插入图片描述

然后将这个文件添加到项目的包含目录中即可,不再赘述:

在这里插入图片描述

现在,我们就可以正式写代码了。

首先新建两个文件:stdafx.hmain.cpp

在这里插入图片描述

然后在stdafx.h头文件中包含如下头文件:

#pragma once
#include<atlbase.h> //使用ATL的基本文件,必须包含
#include<atlapp.h> //使用WTL的基本文件
#include<atlwin.h>  //ATL封装的窗口
#include<atlframe.h> //WTL封装的窗口框架类
#include<atlmisc.h>  //WTL封装的工具类
#include<atlctrls.h> //WTL封装的控件类
#include<atlcrack.h> //WTL封装的增强消息宏
#include<atldlgs.h> //WTL封装的各种对话框类
#include"resource.h" //资源头文件,当使用到了资源,会自动生成该头文件

也就是说,这个头文件是用来包含库的头文件的,方便我们以后使用。

这里写出的便是我们所需要的所有头文件了,注意最好不要更改各个头文件之间的顺序,以后其它文件直接包含这个stdafx.h头文件就行了。

然后我们就可以像MFC那样,在资源视图中,新建一个对话框窗口资源: