基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx

上传人:b****2 文档编号:884753 上传时间:2023-04-29 格式:DOCX 页数:46 大小:298.45KB
下载 相关 举报
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第1页
第1页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第2页
第2页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第3页
第3页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第4页
第4页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第5页
第5页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第6页
第6页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第7页
第7页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第8页
第8页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第9页
第9页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第10页
第10页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第11页
第11页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第12页
第12页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第13页
第13页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第14页
第14页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第15页
第15页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第16页
第16页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第17页
第17页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第18页
第18页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第19页
第19页 / 共46页
基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx

《基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx》由会员分享,可在线阅读,更多相关《基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx(46页珍藏版)》请在冰点文库上搜索。

基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx

(1)将发送内容和接收内容写入文本文件;

(2)显示聊天记录;

(3)删除聊天记录。

D、字体颜色模块

实现字体颜色模块的过程有下面几个步骤:

(1)调用系统字体,获取字体,写入存档

(2)调用系统字体颜色,获取颜色,写入存档

(3)读取、更新字体颜色。

让我们先看下运行结果:

Windows7

Windows2003

Windows7Windows2003

Windows7

Windows2003

心动了么?

让我们开始对第一个模块,也就是MainBord的设计吧。

一、MainBord模块

新建一个MainBord工程

选择Dialogbased,然后Finsh

二、界面设计如下:

(一)、MainBord界面设计如下:

将各ID值设置如下图,通过类向导添加listbox成员变量

(二)、添加好友对话框界面设计如下:

双击,添加类

将各ID值设置如下图,通过类向导添加成员变量

(三)、弹出菜单界面设计如下:

(四)添加图标

三、代码部分:

(一)准备部分

首先,在StdAfx.h中添加如下代码:

afxsock.h头文件;

在MainBordDlg.cpp添加Message.h、AddFreind.h;

其次,MainBordDlg.h添加如下代码:

#defineWM_CLIENT_ACCEPTWM_USER+101

#defineWM_CLIENT_READCLOSEWM_USER+102

/////////////////////////////////////////////////////////////////////////////

//CMainBordDlgdialog

//Construction

public:

intTrayAddIcon();

charlpszTipBefore[100];

//修改前的图标提示信息

LRESULTOnAccept(WPARAMwParam,LPARAMlParam);

LRESULTOnRead(WPARAMwParam,LPARAMlParam);

CMainBordDlg(CWnd*pParent=NULL);

//standardconstructor

SOCKETClient;

//客户的连接请求

SOCKETServerSocket;

//SOCKET

SOCKETtempSocket;

SOCKADDR_INtempSocketAddr;

SOCKADDR_INm_sockServerAddr;

//SOCKET结构

BOOLIsTrue;

CStringip;

CStringSystemMessage;

voidSendMsg();

CStringIPName;

CStringHostName;

voidGetIP_Name();

voidSelectWay();

//好友列表

structFriendList

{

charname[100];

charIP[18];

structFriendList*next;

public:

CStringip;

}*start,*last;

第三,添加Message.h文件

代码如下:

structMessage

{

intsign;

charmsg[1000];

}msg;

第四,添加消息响应

LRESULTCMainBordDlg:

:

OnRead(WPARAMwParam,LPARAMlParam)

if(!

IsTrue)

//m_List.InsertString(0,"

有数据到达,但是没有工作站连接。

"

);

}

CStringstr;

switch(WSAGETSELECTEVENT(lParam))

caseFD_READ:

if(recv(Client,(char*)&

msg,sizeof(msg),0)==SOCKET_ERROR)

{

//m_List.InsertString(0,"

接收数据发生错误。

return0;

}

SelectWay();

//m_History_List.InsertString(0,str);

//MessageBox(str);

break;

caseFD_CLOSE:

str=_T("

工作站退出。

//m_List.InsertString(0,str);

closesocket(Client);

//IsTrue=FALSE;

break;

return0L;

}

OnAccept(WPARAMwParam,LPARAMlParam)

if(WSAGETSELECTERROR(lParam))

ErrordetectedonentryintoOnServerAccept."

return0L;

if(WSAGETSELECTEVENT(lParam)==FD_ACCEPT)//如果

Client=accept(ServerSocket,(LPSOCKADDR)&

m_sockServerAddr,0);

if(Client==INVALID_SOCKET)

//m_List.InsertString(0,"

Serversocketfailedtoacceptconnection."

return0L;

//Clinet

WSAAsyncSelect(Client,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);

IsTrue=TRUE;

//m_List.InsertString(0,"

有客户机连接上了服务器。

(一)、登录模块

(1)初始化列表,获取用户名,服务器的IP地址,使按键失效。

在MainBordDlg.cpp的初始化函数OnInitDialog添加如下代码:

m_FriendList.SetItemHeight(0,18);

start=NULL;

last=NULL;

//TODO:

Addextrainitializationhere

GetIP_Name();

strcpy(lpszTipBefore,"

QQ"

+IPName);

(CEdit*)GetDlgItem(IDC_AddBTN)->

EnableWindow(FALSE);

(CEdit*)GetDlgItem(IDC_HIDEBTN)->

(2)在MainBordDlg.cpp添加获取主机获得IP和主机名的函数

voidCMainBordDlg:

GetIP_Name()//获得IP和主机名

WORDwVersionRequested;

WSADATAwsaData;

charhostname[128];

CStringstrip;

PHOSTENThostinfo;

wVersionRequested=MAKEWORD(2,0);

if(WSAStartup(wVersionRequested,&

wsaData)==0)

if(gethostname(hostname,sizeof(hostname))==0)

if((hostinfo=gethostbyname(hostname))!

=NULL)

{

strip=inet_ntoa(*(structin_addr*)*hostinfo->

h_addr_list);

}

WSACleanup();

IPName=strip;

HostName.Format("

%s"

hostname);

(3)确定登陆后创建套接字,绑定,监听,初始化成功后,激活添加好友和隐藏功能

在MainBordDlg.cpp添加登陆按钮的方法

OnStartBTN()

Addyourcontrolnotificationhandlercodehere

intiErrorCode;

if(WSAStartup(MAKEWORD(2,1),&

wsaData))//调用WindowsSocketsDLL

{

WSACleanup();

return;

服务器开始创建SOCKET。

ServerSocket=socket(PF_INET,SOCK_STREAM,0);

//创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信

if(ServerSocket==INVALID_SOCKET)

无法创建服务器socket!

m_sockServerAddr.sin_family=AF_INET;

m_sockServerAddr.sin_addr.s_addr=INADDR_ANY;

//向所有的IP地址发送消息

m_sockServerAddr.sin_port=htons(8001);

if(bind(ServerSocket,(LPSOCKADDR)&

m_sockServerAddr,sizeof(m_sockServerAddr))==SOCKET_ERROR)//与选定的端口绑定

无法绑定服务器。

}iErrorCode=WSAAsyncSelect(ServerSocket,m_hWnd,WM_CLIENT_ACCEPT,FD_ACCEPT);

//产生相应传递给窗口的消息为WM_SERVER_ACCEPT,这是自定义消息

if(iErrorCode==SOCKET_ERROR)

if(listen(ServerSocket,1)==SOCKET_ERROR)//开始监听客户连接请求

服务器监听失败!

IsTrue=TRUE;

//m_List.AddString("

服务器绑定监听成功。

EnableWindow(TRUE);

(二)好友模块

(1)弹出对话框

(2)获取对话框中的IP(3)检查对方是否在线,建立连接(4)发送请求验证

1在AddFreind.h添加一个成员

CStringipstr;

2好友请求对话框添加代码,在AddFreind.cpp增加发送请求(确定)按钮代码:

voidAddFreind:

OnOK()

Addextravalidationhere

UpdateData(TRUE);

m_IPAddress.GetWindowText(ipstr);

CDialog:

OnOK();

3在MainBordDlg.cpp添加好友按钮的方法

voidCMainBordDlg:

OnAddBTN()

AddFreindmydlg;

if(mydlg.DoModal()==IDOK)

if(mydlg.ipstr.GetLength()==0)

MessageBox("

您没有输入IP地址"

"

错误信息"

NULL);

return;

ip=mydlg.ipstr;

elsereturn;

tempSocket=socket(PF_INET,SOCK_STREAM,0);

if(tempSocket==INVALID_SOCKET)

DWORDdwip;

if((dwip=inet_addr(ip))==INADDR_NONE)

MessageBox("

IP赋值错误"

return;

tempSocketAddr.sin_family=AF_INET;

//使用TCP/IP协议

tempSocketAddr.sin_port=htons(8001);

tempSocketAddr.sin_addr.S_un.S_addr=dwip;

if(connect(tempSocket,(LPSOCKADDR)&

tempSocketAddr,sizeof(tempSocketAddr))==SOCKET_ERROR)

MessageBox("

对方不在线"

添加失败"

else

msg.sign=2;

SystemMessage=IPName+"

#"

+HostName+"

;

strcpy(msg.msg,SystemMessage);

if(send(tempSocket,(char*)&

msg,sizeof(msg),0)==SOCKET_ERROR)

发送消息失败"

MB_OK);

3好友列表模块与消息响应

(1)客户接收请求,将服务端加入列表,发送客户端信息;

(2)服务端得到客户端信息,加入列表;

SelectWay()

FriendList*newlist=newstructFriendList;

CStringstrIP,strName,temp;

//添加新成员

CStringmessage;

inti,j=0;

i=msg.sign;

message.Format("

%d#%s"

msg.sign,msg.msg);

//MessageBox("

here"

//MessageBox(message);

CFilemyfile;

switch(i)

case1:

//别人跟你聊天

myfile.Open("

msg.txt"

CFile:

modeCreate|CFile:

modeWrite);

myfile.Write(message,message.GetLength());

myfile.Close();

//(HWNDFindWindow(LPCTSTRlpClassName,LPCTSTRlpWindowName)

WinExec("

Talk.exe"

SW_SHOW);

break;

case2:

message.Format("

msg.msg);

//MessageBox(message);

strIP="

strName="

j=0;

while(msg.msg[j]!

='

#'

strIP+=msg.msg[j];

j++;

j++;

strName+=msg.msg[j];

}

if((MessageBox(strName+"

请求你通过身份验证"

请求信息"

IDOK))!

=1)

//MessageBox("

return;

for(j=0;

j<

m_FriendList.GetCount();

j++)

m_FriendList.GetText(j,temp);

if(strcmp(strName,temp)==0)

{MessageBox("

你已经添加了这个成员"

strcpy(newlist->

IP,strIP);

name,strName);

newlist->

next=NULL;

if(start==NULL){start=newlist;

last=newlist;

else{

last->

next=newlist;

last=newlist;

m_FriendList.AddString(strName);

ip=strIP;

//同意加为好友

SystemMessage=IPName+"

msg.sign=3;

SendMsg();

case3:

//MessageBox(message);

message.Format("

strIP="

MessageBox(strName+"

通过你的身份验证"

验证信息"

UpdateData(TRUE);

default:

(2)消息响应:

SendMsg()//接受或发送系统请求信息

if((dwip=inet

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2