ImageVerifierCode 换一换
格式:DOCX , 页数:46 ,大小:298.45KB ,
资源ID:884753      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-884753.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于MFC仿QQ聊天程序设计完整实例教程文档格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、(1)将发送内容和接收内容写入文本文件;(2)显示聊天记录;(3)删除聊天记录。D、 字体颜色模块实现字体颜色模块的过程有下面几个步骤:(1)调用系统字体,获取字体,写入存档(2) 调用系统字体颜色,获取颜色,写入存档(3)读取、更新字体颜色。让我们先看下运行结果:Windows7 Windows2003 Windows7 Windows2003Windows7Windows 2003心动了么?让我们开始对第一个模块,也就是MainBord的设计吧。一、MainBord模块新建一个MainBord工程 选择Dialog based,然后Finsh二、界面设计如下:(一)、MainBord界面设

2、计如下:将各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/ CMainBordD

3、lg dialog/ Constructionpublic: int TrayAddIcon(); char lpszTipBefore100; /修改前的图标提示信息 LRESULT OnAccept(WPARAM wParam,LPARAM lParam); LRESULT OnRead(WPARAM wParam,LPARAM lParam); CMainBordDlg(CWnd* pParent = NULL); / standard constructor SOCKET Client; /客户的连接请求 SOCKET ServerSocket; /SOCKET SOCKET temp

4、Socket; 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 name100; char IP18; struct FriendList *next; public: CStrin

5、g ip; *start,*last;第三,添加Message.h文件代码如下:struct Message int sign; char msg1000;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(m

6、sg),0) = SOCKET_ERROR) / m_List.InsertString(0,接收数据发生错误。 return 0; SelectWay(); /m_History_List.InsertString(0,str); /MessageBox(str); break; case FD_CLOSE: str = _T(工作站退出。 /m_List.InsertString(0,str); closesocket(Client); /IsTrue = FALSE; break; return 0L;OnAccept(WPARAM wParam, LPARAM lParam) if (

7、WSAGETSELECTERROR(lParam)Error detected on entry into OnServerAccept. return 0L; if(WSAGETSELECTEVENT(lParam) = FD_ACCEPT)/如果 Client = accept(ServerSocket,(LPSOCKADDR)&m_sockServerAddr,0); if (Client = INVALID_SOCKET) /m_List.InsertString(0,Server socket failed to accept connection. return 0L; /Clin

8、et 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: Add extra initialization here G

9、etIP_Name(); strcpy(lpszTipBefore,QQ +IPName); (CEdit *)GetDlgItem(IDC_AddBTN)-EnableWindow(FALSE); (CEdit *)GetDlgItem(IDC_HIDEBTN)-(2)在MainBordDlg.cpp添加获取主机获得IP和主机名的函数void CMainBordDlg:GetIP_Name()/获得IP和主机名 WORD wVersionRequested; WSADATA wsaData; char hostname128; CString strip; PHOSTENT hostinfo

10、; wVersionRequested=MAKEWORD(2,0); if(WSAStartup(wVersionRequested,&wsaData)=0) if(gethostname(hostname,sizeof(hostname)=0) if(hostinfo=gethostbyname(hostname)!=NULL) strip=inet_ntoa(*(struct in_addr *)*hostinfo-h_addr_list); WSACleanup(); IPName=strip; HostName.Format(%s,hostname);(3) 确定登陆后创建套接字,绑定

11、,监听, 初始化成功后,激活添加好友和隐藏功能在MainBordDlg.cpp添加登陆按钮的方法OnStartBTN() Add your control notification handler code here int iErrorCode; if (WSAStartup(MAKEWORD(2,1),&wsaData) /调用Windows Sockets DLL WSACleanup(); return;服务器开始创建SOCKET。 ServerSocket=socket(PF_INET,SOCK_STREAM,0); /创建服务器端Socket,类型为SOCK_STREAM,面向连接

12、的通信 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) /与选定的端口绑定无法绑定服

13、务器。 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)获取对话框

14、中的IP(3)检查对方是否在线,建立连接(4)发送请求验证1在AddFreind.h添加一个成员 CString ipstr;2好友请求对话框添加代码,在AddFreind.cpp增加发送请求(确定)按钮代码:void AddFreind:OnOK() Add extra validation here UpdateData(TRUE); m_IPAddress.GetWindowText(ipstr); CDialog:OnOK();3在MainBordDlg.cpp添加好友按钮的方法 void CMainBordDlg:OnAddBTN() AddFreind mydlg; if(mydl

15、g.DoModal() = IDOK) if(mydlg.ipstr.GetLength()=0) MessageBox(您没有输入IP地址,错误信息,NULL); return; ip=mydlg.ipstr; else return; tempSocket=socket(PF_INET,SOCK_STREAM,0); if(tempSocket = INVALID_SOCKET) DWORD dwip; if(dwip=inet_addr(ip)=INADDR_NONE) MessageBox(IP赋值错误 return; tempSocketAddr.sin_family=AF_INET

16、; /使用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(tem

17、pSocket,(char *)&msg,sizeof(msg),0)=SOCKET_ERROR)发送消息失败,MB_OK);3好友列表模块与消息响应(1)客户接收请求,将服务端加入列表,发送客户端信息 ;(2)服务端得到客户端信息,加入列表;SelectWay() FriendList *newlist=new struct FriendList; CString strIP,strName,temp;/添加新成员 CString message; int i,j=0; i=msg.sign; message.Format(%d#%s,msg.sign,msg.msg);/ MessageB

18、ox(here/ MessageBox(message); CFile myfile; switch(i) case 1: /别人跟你聊天 myfile.Open(msg.txt,CFile:modeCreate | CFile:modeWrite ); myfile.Write(message, message.GetLength(); myfile.Close(); /(HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName) WinExec(Talk.exe,SW_SHOW);break; case 2:message.Form

19、at(,msg.msg);/ MessageBox(message); strIP= strName= j=0; while(msg.msgj!=#) strIP+=msg.msgj; j+; j+; strName+=msg.msgj; if(MessageBox(strName+请求你通过身份验证请求信息,IDOK)!=1) /MessageBox( return; for(j=0;jIP,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(); case 3:/MessageBox(message); message.Format( strIP= MessageBox(strName+通过你的身份验证验证信息 UpdateData(TRUE); default:(2) 消息响应:SendMsg()/接受或发送系统请求信息 if(dwip=inet

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

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