一、前言
鉴于很多人都想给聊天室添加单聊的功能,所以这里就再出一篇功能更全的聊天室
一直啃旧东西也没意思,所以本篇文章再给大家介绍一个新的窗口框架:WTL
本文的聊天室客户端将基于WTL
进行开发,主要有三个程序:windows客户端、windows服务器以及linux服务器。
由于有两个不同平台的服务器,分别开发就太麻烦了,因此本文选择使用boost
中的asio
库进行跨平台开发。
二、前置知识点
1.相关文章
在学习本文前,你需要至少阅读以下四篇文章:
其中第一点,是WTL
的底层实现逻辑,不懂的话,后面用起来你可能就会觉得非常奇怪。
然后是第二点,由于我们的服务器必须能运行到windows
、linux
双平台,如果分别进行开发就太麻烦了,所以这里采用C++准标准库中的asio
库进行跨平台开发。
即我们只需要写一份代码,就可以在多个平台直接编译运行
然后是第三点,因为我们需要用到第三方库,所以就必须得学会如何在自己的项目中使用第三方库。
但本文实际上并不需要,因为我直接提供了完整的项目解决方案,包括用到的WTL与boost第三方库,我也直接放在了项目中。
至于最后一点,则是为了让我们能够直接在VS中编译运行linux
服务器。
2.WTL的基本使用流程
和MFC
一样,WTL
也是一个图形框架,是由微软员工写出来的。
之所以出现WTL,主要还是因为MFC很笨重,不跨平台,闭源,而且似乎已经很多年没有更新过了
一个最简单的MFC程序,默认生成就有数兆大小,一旦使用MFC出现bug,排错就会非常麻烦,因为没有源码。
而WTL
就可以很好的解决这些问题,因为WTL
是直接给我们提供框架源代码的,你可以任意修改、扩展里面的内容。
而且因为其小巧,其生成的文件非常小,本文完成的这个聊天室,最终生成的可执行文件只有160k
。
但缺点肯定也是有的,就是不跨平台,使用起来也较为麻烦。
不过我已经总结出了一套基本使用流程,所以不必过于担心,只要你会MFC
,WTL
也能很快学会。
WTL很多函数接口都是直接模仿的MFC,所以如果你对WTL中的某个控件不知道怎么用,你就可以直接查询MFC的文档,可以点击这里查看官方MFC文档。
首先,我们需要建立一个桌面窗口空项目:
随便取个名字:
然后选择桌面应用程序,以及勾选空项目:
如果用的vcpkg
,那么下面两个配置的步骤就不需要了。
这样我们的客户端项目就创建好了,现在你就可以将WTL源代码复制进这个项目文件夹中:
然后将这个文件添加到项目的包含目录中即可,不再赘述:
现在,我们就可以正式写代码了。
首先新建两个文件:stdafx.h
与main.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那样,在资源视图中,新建一个对话框窗口资源: