版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络聊天系统实验报告1. 功能介绍(1)本程序的主界面截图及介绍开曲野塔束席fisra文申蜀 査苦册 帚曲:也:.匕土.取苗辭山:耒知is匚地止:耒n也遞A馥:o垣学农“锚弄盘01*睢qq3?j晒|皿彌本程序的风格是清新明亮,代表着健康向上,偏向于为年轻人设计。主色调是蓝色,与白色搭配,有一种天马行空的感觉。让人时刻感受着蓝天白云,使 使用者不会因为长久对着这个界面而感到厌倦。本程序是用MFC的单文档模式,支持 SOCKET。集服务器与客户端于一身 ,既可用来 当服务器,也可当客户端来连接服务器,并且不影响相互之间的功能。标题栏上显示着本软件的名称:NN聊天器。NN是本人象征,聊天器是本软件功
2、能的代名词。如图:标题栏下是菜单栏,其上有:开始、结束、设置、文件、查看、帮助。它们的快捷键分别为:Ctrl+B,Ctrl+O,Ctrl+T,Ctrl+W,Ctrl+V ,Ctrl+H。它们的功能下文会详细介绍。如图:开赠()绪束 滩(D文件泄)查看也般他菜单栏下是工具栏,有 7个图标,单击它们都能实现一个功能;从左到右分别是用于 创建服务器,连接服务器,关闭服务器,退出服务器,复制,传输文件,帮助。如图:工具栏下左边的大片空白区域是显示聊天记录、系统信息、用户信息、用户表情等等 文字和图片信息的地方,用户相互之间聊天,聊天的内容就是都显示在这上面的。它是 RichEdit控件,嵌在FORM的
3、对话框上,使用“视”来显示这个控件。如图:工具栏下右边的长方形,是List Control控件嵌在FORM的对话框中。在这个控件中,有 N行两列,第一列按行显示每个用户的头像,第二列按行显示对应头像的用户昵称。如右图示:在信息区下就是用户的操作区,是一个对话框,有许多控件,其上有:对象:组合框控件,显示“所有人“和新加入的聊天用户,可以选择你要发送消 息的对象。动作:组合框控件,显示各种动作,选择一种动作,发送消息时,就会显示相应 动作的文字信息。悄悄话:Check Box控件,如果你选择了这个单选框,那么你给谁发送的消息其他 人就看不到了,也就是私聊功能。图片表情:按钮控件,如果你在“添加图
4、片表情“那选择了一个图片表情,那么 这个控件上就会显示相应的图片表情。添加图片表情:按钮控件,如果你要发送图片,就点击一下你要发送的图片,如 果不要就点击“无“这个按钮。发送:按钮控件,如果要发送消息就单击这个按钮。制作信息:关于本人的信息。如图示:2洩斛#在往下就是状态栏:从左到到右依次是:状态,在线人数,本人相关信息。如图示:罐繼 碟册拘制蝴 魏加 弧耦織膽幽俪(2)分界面截图及介绍 、菜单栏和工具栏开始)结束(Q)设置0)文件(世)查看(巾帮助(宙樹旳固旳| I(注:以下的菜单均有快捷键,可看截图来记住) 菜单栏:开始cdnnW开始()结束(Q)设置(I)文件代创逢服务器(吵 Ctrl+
5、N 连接服算器Ctrl+J 复制Ctrl+C这个菜单有三个子菜单,其功能分别是:创建服务器:创建一个服务器,用于接听客户端的连接信息。 连接服务器:连接服务器,如果成功就可以发送和接收服务器的消息, 复制:复制聊天聊天的内容。进行聊天。菜单栏:结束设置(I)文件(妙查看【关闭服务器Ctrl+C 退出聊天室(匚tri十匚 关闭程序(出这个菜单有三个子菜单,其功能分别是:关闭服务器:这一项只有在建立了服务器后才有效,用于关闭服务器。 退出聊天室:这一项只有你是当客户端连接了一个服务器后才有效, 务器的连接。关闭程序:退出这个程序。用于断开与服k夭器结束濡屏(Uctl+c改名(匚trl+G屏蔽一个人
6、Ctrl+I保存聊天记录Ctrl+B 我入聊天记录心Ctri+L菜单栏:设置这个菜单有5个子菜单,其功能分别是:清屏:清楚所有显示的聊天内容,还你一个空白的区域。 改名:可以更改你的昵称,而不用退出程序或断开重连。屏蔽一个人:如果有一个人实在讨厌, 你不愿意见到他或她发的任何消息和内容, 那么你可以用这个功能把他或她屏蔽了,你将见不到他或她发的任 何消息和内容。保存聊天记录:如果你觉的聊天内容有价值,你可以用这个功能保存下来。 载入聊天记录:如果你想看看以前的聊天记录,你可以用这个功能把以前的记录 载入到显示屏。菜单栏:文件ifj:(o)设置0)立件查看帮助(也传输丈件Ctrl+S这个菜单有一
7、个子菜单,其功能是:传输文件:如果你有文件要发给好友,那么你可以有这个功能来实现。菜单栏:查看:)文件(妙查看(刃帮助(也圉3嶄工貝栏(I)毎T 7状态栏这个菜单有两个子菜单,其功能是:工具栏:选择后工具栏消失,如再选择则重新出现。状态栏:选择后状态栏消失,如再选择则重新出现。菜单栏:帮助帮助(出关于 Chat(A)n这个菜单有一个子菜单,其功能是:关于Chat:选择后跳出一个对话框,显示关于本软件的一些信息。工具栏:创建服务器与菜单栏的开始一创建服务器相联系。工具栏:连接服务器与菜单栏的开始一连接服务器相联系。工具栏:关闭服务器与菜单栏的结束一关闭服务器相联系。工具栏:退出服务器与菜单栏的结
8、束一退出服务器相联系。与菜单栏的开始一复制相联系。工具栏:传输文件、$与菜单栏的文件一传输文件相联系。工具栏:关于?与菜单栏的关于一关于 Chat相联系。 、创建服务器界面单击创建服务器跳出的对话框:可以输入昵称、端口号,也可以选择头像。创建客户端界面IP、服务器的端单击连接服务器跳出的对话框:可以输入昵称、你要连接的服务器的 口号、你要选择的头像。更改昵称界面单击改名菜单跳出的对话框:输入新昵称按确定便可以实现功能。保存聊天记录界面单击保存聊天记录跳出的对话框:可以输入你自己想要的名字保存为txt文件。载入聊天记录界面pjfieadrne.bct SW5OFT.NET 1st文件若(a).空
9、件羹型:三I.-A单击载入聊天记录跳出的对话框:可以输入你自己想要找的名字载入txt文件。传输文件界面单击传输文件跳出的对话框:可以单击选择文件,来选择一个文件传输。接受文件界面如果有文件传输过来自动跳出的对话框:可以单击接受文件,来选择一个地方保存传输过来的文件。关于Chat界面添加图片表情:选择聊天时所要发送的图片表情。T 二9o厉%单击菜单关于Chat跳出的对话框:显示版本信息,制作信息,和一些说明。 、用户操作界面及介绍对象:选择要聊天或发送信息文件的对象动作:选择聊天时要用文字表达的动作悄悄话:选择秘密聊天,不让别人看见原门大学軟件03369018_iM恩制作2005文字输入框:输入
10、你要说的话。图片表情:显示马上要发送的图片表情。发送:发送你要说的话和做的表情按这个按钮。本人的相关信息2. 创作过程在一开始时我觉的聊天系统很简单,准备把它和五字棋结合起来。所以我的设计方 案就是在可能的情况下结合五子棋和聊天系统。开始制作后,我选择的是用对话框作为 主界面。可是随着制作的深入和了解到的知识越来越多,我感觉到结合五子棋和聊天系 统,只会使两个程序都处于低级状态,无法提高,所以我决定专攻聊天系统。当我的聊 天系统成型后,我发现用对话框做的聊天室很难在有提高和升级的潜力。为了得到更多 的锻炼,我毅然放弃了已成型的对话框聊天系统,开始向单文档的视图界面进发。经过 几个不眠不休的夜晚
11、,我终于做出了现在的这个程序。它还有很多发展潜力,可是由于 时间的原因,我只能把最重要的功能完成了。其他功能是不一定必须的, 可是可以扩展,这是本程序的特点之一。3. 本程序的优点(1)界面优美(2)使用方便(3)运行快速(4)功能多样以下是本人的得意代码:1这一段代码实现了本程序窗口分割,使本程序的几个“视“显示的恰到好处。BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext *pContext)RECT wndRect;GetDesktopWindow()-GetWindowRect(&wndRect);if(m
12、_wndSplitter1.CreateStatic(this,2,1)=NULL)return FALSE;m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CBottomView),CSize(0,0),pContext);if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSpl itter1.IdFromRowCol(0,0)=NULL)return FALSE;m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(
13、CRightView),CSize(0,0),pContext);m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CChatView),CSize(wndRect.right-150, 0),pContext);m_wndSplitter1.SetRowInfo(0,wndRect.bottom-230,0);SetActiveView(CBottomView *)m_wndSplitter1.GetPane(1,0);return TRUE;2. 这一段是聊天系统中最常用的一种消息传送函数,版本很多,不过我仍然觉的我写的这个 函数很好,毕竟我的消息发送
14、都靠它的。void CMsg:Serialize(CArchive &ar)if(ar.IsStoring()arcommand;arm_strFrom;arm_strTo;arm_strSay;arm_IP;arm_strFace;arm_strHead;arcommand;arm_strFrom;arm_strTo;arm_strSay;arm_IP;arm_strFace;arm_strHead;aroneface;m_strUserList.Serialize(ar);m_strHeadList.Serialize(ar);3. 这一段代码我在对话框上加载了超过30 张的位图,还不错的
15、函数。void CBottomView:OnInitialUpdate() GetDlgItem(IDC_EDIT_MSG)-SetFocus(); CFormView:OnInitialUpdate(); m_cmbObject.SetCurSel(0);m_cmbFace.SetCurSel(0);/CBitmap bitmap; bitmap.LoadBitmap(IDB_SEND);HBITMAP hbitmap=(HBITMAP)bitmap.Detach();CButton *pbutton=(CButton*)GetDlgItem(ID_FASONG); pbutton-SetB
16、itmap(hbitmap);/bitmap.LoadBitmap(IDB_WU); hbitmap=(HBITMAP)bitmap.Detach(); pbutton=(CButton*)GetDlgItem(IDC_ONL YFACE);pbutton-SetBitmap(hbitmap);/bitmap.LoadBitmap(IDB_WU); hbitmap=(HBITMAP)bitmap.Detach(); pbutton=(CButton*)GetDlgItem(IDC_WUFACE);pbutton-SetBitmap(hbitmap);/int i;bfacetemp=-1;fo
17、r(i=0;iSetBitmap(hbitmap);4. 这段代码使我可以设置 RichEdit 上显示文字的颜色,我觉的很有用。 void CAutoRich:SeletColor(COLORREF clr)CHARFORMAT cf=GetCharFormat(); if(cf.dwEffects&CFE_AUTOCOLOR)cf.dwEffects-=CFE_AUTOCOLOR; cf.crTextColor=clr;cf.dwMask=CFM_COLOR;SetSelectionCharFormat(cf);5. 以下四个函数虽然简单,可是功能却是大的可怕,没有他们程序动不了。SetD
18、ialogBkColor(RGB(157,199,253), RGB(255,255,255);/ 设置对话框的背景和字的颜色。CoInitialize(NULL);/ 在 RichEdit 中加载位图是必须的函数CoUninitialize();/ 上个函数的释放函数AfxInitRichEdit();/ 显示带有 RichEdit 的对话框必须的函数6. 实现对话框上定义字的背景色和字的颜色void CTransparent:OnPaint()CPaintDC dc(this); / device context for paintingCRect rect;GetClientRect(r
19、ect);CString str;GetWindowText(str);CFont *font,*oldfont;font=GetFont();oldfont=dc.SelectObject(font);dc.SetTextColor(RGB(255,255,255);dc.SetBkMode(TRANSPARENT);dc.DrawText(str,rect,0);dc.SelectObject(oldfont);/ Do not call CStatic:OnPaint() for painting messages7. 文件结构体,个人认为很重要struct SOCKET_FILE_IN
20、FOTCHAR szTitleMAX_PA TH;/DWORD dwAttributes;FILETIME CreatTime;FILETIME LastAccessTime;FILETIME LastWriteTime;DWORD dwSizeHigh;DWORD dwSizeLow;DWORD kong;DWORD kong2;8. 改变昵称,虽然难度不大,但是它写的和严紧,考虑了各个方面 void CChatDoc:OnChangname()CChangeName dlg;if(dlg.DoModal()=IDOK) if(!Server&!Client)DisplayMessage(
21、系统消息 , 服务尚未启动 !,USER_ERROR); return;if(dlg.m_strNewName=)DisplayMessage( 系统消息 , 名字不能为空 !,USER_ERROR); return; for(POSITION pos=m_strUserList.GetHeadPosition();pos!=NULL;) if(dlg.m_strNewName=m_strUserList.GetNext(pos) DisplayMessage( 系统消息 , 这个名字已经存在 !,USER_ERROR); return;if(Server)for(POSITION pos=m
22、_strUserList.GetHeadPosition();pos!=NULL;)POSITION tpos=pos; if(strFrom=m_strUserList.GetNext(pos) m_strUserList.SetAt(tpos,dlg.m_strNewName); strFrom=dlg.m_strNewName;break;msg.m_strUserList.RemoveAll();for(POSITION pos2=m_strUserList.GetHeadPosition();pos2!=NULL;) msg.m_strUserList.AddTail(m_strUs
23、erList.GetNext(pos2);DisplayMessage( 系统消息 , 你已经改名 !,USER_ERROR); UpdateInfo();msg.m_strFrom= 系统消息 ; msg.m_strSay= 服务器已改名为: +strFrom;mand=USER_CHANGENAME;for(POSITION pos1=m_connectList.GetHeadPosition();pos1!=NULL;)CConnectSocket *tempSocket=(CConnectSocket *)m_connectList.GetNext(pos1);SendC
24、lientMsg(tempSocket,&msg);if(Client)SendMsg(strFrom,dlg.m_strNewName, 改变昵称! ,USER_CHANGENAME); strFrom=dlg.m_strNewName;9. 在处理结束信息上很不错,内存都释放了void CChatDoc:OnCutfuwu()msg.Init();msg.m_strFrom= 系统消息 ;msg.m_strSay= 服务器已经关闭! ;mand=USER_STOP; if(m_pServerSocket!=NULL)delete m_pServerSocket; m_pServerSocket=NULL; while(!m_connectList.IsEmpty()CConnectSocket *pSocket=(CConnectSocket *)m_connectList.RemoveHead();SendClientMsg(pSoc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光学仪器原理与应用手册
- 2025-2026学年教学设计教师活动英语
- 2025-2026学年《年月日》教学设计
- 2025-2026学年翻身美食图片教学设计
- 2025-2026学年草原小姐妹教学设计
- 2.3 细胞中的糖类和脂质教学设计教学反思-2025-2026学年高一上学期生物人教版(2019)必修1
- 2026年山东省枣庄市事业编单位人员招聘考试参考题库及答案详解
- 2026年天水市秦州区社区工作者招聘笔试参考试题及答案详解
- 2026年绵阳市涪城区事业编单位人员招聘笔试参考试题及答案详解
- 2026年湖南省常德市事业编单位人员招聘考试参考题库及答案详解
- GB/T 44353.2-2024动物源医疗器械第2部分:来源、收集与处置的控制
- 船员培训总结
- 大区经理竞聘报告
- NB-T 10985-2022 风力发电场维护规程
- GB/T 15622-2023液压缸试验方法
- 不谈计算精细解析LLC的工作原理
- 文言文曹冲称象课件
- 脱硫装置检修导则实施细则
- 附件:AA高速公路项目前期黒棉土处置惩罚方案二
- 2023年企业主要负责人和安全管理人员培训
- 亲和层析课件
评论
0/150
提交评论