基于MFC仿QQ聊天程序设计完整实例教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本系统基于客户端/服务器基本原理,程序即是服务端,也是客户端,通过IP就可以相互添加好友,并且实现点到点通信,有聊天记录(未实现根据用户发送的消息而改变字体颜色,只能在客户端改),字体颜色设置(一改全改~),包含主界面MaindBord和聊天Talk两大功能模块。
(1) MaindBord模块
A、登录模块
登陆模块的实现过程有下面几个步骤:
(1)初始化列表信息,获取用户名,服务器的IP地址,使按键失效
(2)确认登陆后创建套接字,绑定,监听
(3)初始化成功后,激活添加好友和隐藏功能
B、好友模块
添加好友的实现过程有下面几个步骤:
(1)弹出对话框
(2)获取对话框中的IP
(3)检查对方是否在线,建立连接
(4)发送请求验证
C、好友列表模块
(1)客户接收请求,将服务端加入列表,发送客户端信息
(2)服务端得到客户端信息,加入列表
(3)双击好友列表,弹出发送信息对话框
D、隐藏模块
(1)隐藏与显示
(2)响应鼠标,弹出控制菜单
(2)聊天Talk模块
A、发送信息模块
聊天模块中,发送信息模块的实现过程有下面几个步骤:
(1)通过列表双击一个好友为聊天对象,弹出聊天窗口;
(2)用户按下发送按钮后,检测对方是否在线,
检测对方是否在线
(3)将聊天内容发送出去
(4)在本地即时聊天内容显示的编辑框中添加发送的内容并写入聊天记录。
B、接收信息模块
聊天模块中,接收信息模块的实现过程有下面几个步骤:
(1)由主界面判断接收到信息的类型,是否为好友发来信息,如果是,则打开聊天窗口
(2)读取消息,并写入聊天记录,
(3)载入字体颜色信息。
(4) 显示聊天记录
C、聊天记录管理模块
聊天记录管理模块的实现过程有下面几个步骤:
(1)将发送内容和接收内容写入文本文件;
(2)显示聊天记录;
(3)删除聊天记录。
D、字体颜色模块
实现字体颜色模块的过程有下面几个步骤:
(1)调用系统字体,获取字体,写入存档
(2) 调用系统字体颜色,获取颜色,写入存档
(3)读取、更新字体颜色。
让我们先看下运行结果:
Windows7
Windows2003
Windows7 Windows2003
Windows7 Windows2003
Windows7
Windows 2003
心动了么?让我们开始对第一个模块,也就是MainBord的设计吧。
一、MainBord模块
新建一个MainBord工程
选择Dialog based,然后Finsh
二、界面设计如下:(一)、MainBord界面设计如下:
将各ID值设置如下图,通过类向导添加listbox成员变量(二)、添加好友对话框界面设计如下:
双击,添加类
将各ID值设置如下图,通过类向导添加成员变量
(三)、弹出菜单界面设计如下:
(四)添加图标
三、代码部分:
(一)准备部分
首先,在StdAfx.h中添加如下代码:afxsock.h 头文件;在MainBordDlg.cpp添加Message.h 、AddFreind.h;
其次,MainBordDlg.h添加如下代码:
#define WM_CLIENT_ACCEPT WM_USER+101
#define WM_CLIENT_READCLOSE WM_USER+102
/////////////////////////////////////////////////////////////////////////////
// CMainBordDlg dialog
// Construction
public:
int TrayAddIcon();
char lpszTipBefore[100]; //修改前的图标提示信息
LRESULT OnAccept(WPARAM wParam,LPARAM lParam);
LRESULT OnRead(WPARAM wParam,LPARAM lParam);
CMainBordDlg(CWnd* pParent = NULL); // standard constructor
SOCKET Client; //客户的连接请求
SOCKET ServerSocket; //SOCKET
SOCKET tempSocket;
SOCKADDR_IN tempSocketAddr;
SOCKADDR_IN m_sockServerAddr; //SOCKET 结构
BOOL IsTrue;
CString ip;
CString SystemMessage;
void SendMsg();
CString IPName;
CString HostName;
void GetIP_Name();
void SelectWay();
//好友列表
struct FriendList
{
char name[100];
char IP[18];
struct FriendList *next;
public:
CString ip;
} *start,*last;
第三,添加Message.h文件
代码如下:
struct Message
{
int sign;
char msg[1000];
}msg;
第四,添加消息响应
LRESULT CMainBordDlg::OnRead(WPARAM wParam, LPARAM lParam) {
if(!IsTrue)
{
//m_List.InsertString(0,"有数据到达,但是没有工作站连接。");
}
CString str;
switch (WSAGETSELECTEVENT(lParam))
{
case FD_READ:
if(recv(Client,(char *)&msg,sizeof(msg),0) == SOCKET_ERROR)
{
// m_List.InsertString(0,"接收数据发生错误。");
return 0;
}
SelectWay();
//m_History_List.InsertString(0,str);