




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文) 题目名称:基于VC+的企业内部通信软件的设计与实现 学 院: 计算机科学与技术 专业年级: 计算机科学与技术 学生姓名: 班级学号: 指导教师: 二一四 年 六 月 六 日I摘 要八十年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大学Berkeley分校提供了资金,让他们在UNIX操作系统下实现TCP/IP协议。在这个项目中,研究人员为TCP/IP网络通信开发了一个API(应用程序接口)。这个API称为Socket接口(套接字)。今天,SOCKET接口是TCP/IP网络最为通用的API,也是在INTERNET上进行应用开发最为通用的API。随着网络技术的发展及人们生活的需求,网络通信已越来越受到人们的亲睐。本课题是开发一个基于UDP的企业内部通信系统,既可以应用于封闭的局域网环境下,也可以在互联网的环境下使用。本软件是基于VC+6.0开发的,采用软件工程的方法,应用了程序设计技术、网络技术,运用了WINSOCK相关API接口。WINSOCK 是在Windows进行网络通信编程的API接口,也是Windows网络编程的标准。研究的主要内容是如何利用套接字编写网络通信程序,主要完成了客户端的发送信息,发送图片与显示在线用户及多人聊天,文件传输等工作。文件传输功能是本软件系统的一个亮点,它可以让两个用户之间实现文件的传递。通过聊天工具的使用,让分布在不同地点、使用不同机器的一组用户能够及时进行信息交流,以达到信息共享的目的,从而提高工作或者生活效率。通过测试,本软件操作简单,灵活性好,运行也比较稳定,可以广泛使用。关键字 : UDP;VC+6.0;WINSOCK;网络通信 AbstractThe early 80s, the U.S. governments Advanced Research Project agency (ARPA) to the University of California, Berkeley provided funding to enable them to achieve in the UNIX operating system, TCP / IP protocol. In this project, researchers for the TCP / IP Network Communication Development an API (application program interface). This API is called Socket Interface (socket). Today, SOCKET interface is a TCP / IP network of the most common API, is the INTERNET application development on the most common API.With the development of network technology and the demand of peoples life, network communication has been more and more get the favor of people. This topic is to develop an internal communication system based on UDP, local area network (LAN) can be used in a closed environment, also can be used under the environment of Internet. This software is based on vc + + 6.0 development, adopt the method of software engineering, application programming technology, network technology, using the WINSOCK API interface. WINSOCK is in Windows network communication programming API interface, also is the standard of Windows network programming.The main content of the research is how to use the socket network communication program, mainly completed the client sends a message, send pictures to show online users and many people chat, file transfer, etc.File transfer function is one of the highlights of this software system, it can realize the file transfer between two users.Through the use of chat, let distribution in different locations, a group of users will be able to use different machine exchange of information in a timely manner, in order to achieve the purpose of information sharing, so as to improve the efficiency of work or life.Through test, the software operation is simple, flexibility is good, operation is stable, can be widely used.Key words:UDP;VC+6.0;WINSOCK;Network communication目 录摘 要IAbstractII第1章 绪 论11.1 课题选题背景11.2 国内外现状分析和研究成果11.3 课题研究内容及意义2第2章相关技术概述32.1 开发环境3 2.1.1 开发工具简介3 2.1.2 Visual C+ MFC概述32.2 WinSock网络编程3 2.2.1Socket简介4 2.2.2开发Windows Sockets网络通信程序的软、硬件环境4 2.2.3CSocket类编程模型5 2.2.4用VC6.0进行Windows Sockets程序开发的技术要点52.3 TCP/IP协议概述6第3章 软件需求分析73.1需求分析7 3.1.1功能需求分析7 3.1.2数据需求分析7 3.1.3性能需求分析7 3.1.4运行需求分析83.2 可行性分析8 3.2.1 经济可行性分析8 3.2.2 技术可行性分析8 3.2.3 运行可行性分析8第4章软件系统设计94.1概要设计94.2基本框架设计10 4.2.1宏和数据结构的定义10 4.2.2程序配置文件10 4.2.3调试模块10 4.2.4主界面初始化11 4.2.5主界面布局15 4.2.6自绘按钮16 4.2.7自绘好友列表框184.3好友管理19 4.3.1添加好友19 4.3.2删除好友21 4.3.3与好友保持连接224.4聊天模块234.5聊天室模块264.6传送文件模块294.7共享屏幕模块324.8白板模块34第5章 软件测试365.1 软件测试的目的365.2 软件测试方法分类36 5.2.1 静态测试与动态测试36 5.2.2 黑盒测试与白盒测试36 5.2.3 测试中的错误分类375.3 通讯软件测试38 5.3.1 测试用例设计要求38 5.3.2 聊天模块测试用例385.4 测试总结38结 论40致 谢41参考文献42附 录43第1章 绪 论1.1 课题选题背景近年来,随着全球信息化的不断发展,网络也在飞速发展。我们都知道局域网的存在,特别是在大型企业,比如银行、公安机关等等对网络安全要求特别严格的企业单位都会有自己的局域网,因为局域网的安全可靠,使其不容易受到网络病毒的攻击,所以局域网得以在企业之中广泛应用。然而,任何企业的内部都是离不开通讯的,所以企业内部通信软件就应运而生了。这种通信软件是专为局域网通信而开发的,它适用于局域网,同时也促进了局域网的发展,局域网发展又给通信软件带来了更多应用的机会,可以说,局域网通信工具和局域网二者之间相辅相成,相互促进。发展到今天,大多数企业都应用了局域网,可见其在当今社会的重要地位。应用局域网办公的企业,必须要有自己企业内部的通讯软件,然而,现在,在广域网上,可盈利的通讯软件到处都是,而局域网内的通讯软件却很少,在功能上,也是参差不齐。因此,为了企业更好、更安全的通讯,我想到开发一款适用于企业的局域网通信软件,恰好通过我的大学所学,我有信心在老师的讲解和指导下,很好的完成这任务。最后,老师为我选定了基于VC+企业内部通信软件的设计与实现这一题目。1.2 国内外现状分析和研究成果即时通讯工具是目前使用最为普遍的网络应用软件之一,继QQ出现在我们的计算机上之后,网易、新浪、搜狐等知名公司也迫不及待地加入了这一领域的竞争,而微软、雅虎、AOL的国际巨头公司也一刻没有停止自己扩张的脚步。国内在使用的最普及的就是腾讯QQ,微软的MSN也受到商务人士的青睐;国外主要使用的是由美国在线出的ICQ、AMI以及微软的MSN等。目前,windows平台方面的即时通讯软件已经很多,但是其他系统的比较少,例如Linux平台,虽然有类似QQ方面的一些产品,比如LinuxQQ、Lunaqq,但是数量毕竟不多且功能界面等都还不太理想;面向企业的即时通讯软件虽然比较多,但是除了QQ、微软等公司的产品,其他的产品都还比较年轻,推出时间较短,且用户较少。鉴于此种情况,很多公司都在开发新的即时通讯工具软件,利用新的技术开发,使客户端和服务器端的性能和功能都得到一定的提升,适合在企业内部网络和互联网上运行,同时使其具备跨平台的特性,方便在各个系统上运行。另外,许多企业已经应用了即时通讯类产品作为内部交流的平台。但绝大多数企事业单位只把即时通讯类产品作为边缘产品,没有充分的认识到即时通讯类产品在工作中的重要作用,没有想过去如何正确的应用。还有许多企事业单位使用网络个人交流工具(如QQ,MSN),但存在许多安全隐患。许多开发商并没有将此产品作为公司的重点,也并没有从客户的角度出发,只是在产品线上附加即时通讯产品,做的不够完善,使此产品沦为边缘产品,从而导致即时通讯产品市场萎缩。随着我们国家的信息化飞速发展,许多企事业单位信息化程度大幅度提高。企事业单位非常需要使用内部即时通讯产品来提高工作效率。1.3 课题研究内容及意义为了保障通信安全,建设内网、专网是一个解决这一问题的方法,随着企业业务范围的不断扩大,网络规模也在扩大,采用该方案的话,成本必然非常高。由于公众信息网是对整个社会开放的公众基础网络,具有覆盖性范围广、速度快、费用低、使用方便等特点,但同时却存在着安全性差的问题。用户通过公众信息网来传输的信息,在传输的过程中可能被窃取、篡改和伪造,信息的安全性和可靠性因此会大大的降低,所以内网、专网还是不可缺少的。在通信工具上,我们习惯了通过类似于QQ,MSN之类的程序软件和天南地北的朋友聊天、发信息,不过所有聊天程序都需要Internet的支持,因此它们无法在局域网内部大显身手,那么是否想到过要让单位内部的员工,寝室周围的同学,不用上Internet就可以轻松体验到内网通讯的乐趣呢?有了这种想法,本课题的研究内容开发局域网通信软件就有了必要性,让单位员工或者寝室同学不出内网就能自由通信。企业内部通信软件是一个即时通信工具。因此,通过该软件的设计和开发,可以对自己所学习的知识进行了一次综合提高,并且会有更深层次的理解和掌握,在这个过程中,还能激发自己的学习潜力,提高软件开发的能力,加深对网络协议和Windows环境下网络编程的理解和掌握,所以,开发企业内部通信软件在理论和实践上都有非常重要的意义。第2章相关技术概述2.1 开发环境本节主要介绍本软件系统的开发环境,以及运用的编程工具等。2.1.1 开发工具简介本系统采用Windows 7中文操作系统,包含Windows API的支持,使用面向对象的编程工具Visual C+ 6.0进行项目开发。他是一款面向对象的功能强大的可视化编程开发工具。使用Vissual C+可以完成任何C语言和C+语言的程序。其中的MFC库集成了Windows Sockets API应用程序接口,使得用户可以用面向对象的方法直接调用。AppWizard可以用来生成初步的框架文件,资源编辑器用于帮助直观地设计用户接口,CLassWizard用来协助添加代码到框架文件,并且提供文档/视图结构支持,从而使用应用程序开发变得轻松。2.1.2 Visual C+ MFC概述MFC(Microsoft Foundation Class Library)库是Microsoft公司基于Windows的C+应用程序编程接口,是Visual C+中编写Windows应用程序的首选方法。MFC是一组C+类,这些是由常用的Windows应用程序定制的。使用MFC,可以在任何时候调用Win32函数、最大程度地利用Windows。而且,基于MFC的程序不仅小巧而且运行速度快,这是因为Visual C+非常接近Windows的底层,所以编译器所编译出来的程序质量相当的高,从而保证了Visual C+编写出来的软件产品拥有高效率的运行速度。MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来事更为简单的方法。因为在总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。 2.2 WinSock网络编程Windows Sockets是从Berkeley Sockets扩展而来的,其在继承Berkeley Sockets的基础上,又进行了新的扩充。这些扩充主要是提供了一些异步函数,并增加了符合WINDOWS消息驱动特性的网络事件异步选择机制。Windows Sockets由两部分组成:开发组件和运行组件。开发组件:Windows Sockets 实现文档、应用程序接口(API)引入库和一些头文件。运行组件:Windows Sockets 应用程序接口的动态链接库(WINSOCK.DLL)。2.2.1Socket简介 套接字(Socket)最初是由加利福尼亚大学Berkeley分校为UNIX操作系统开发的网络通信接口,随着UNIX操作系统的广泛使用,套接字成为当前最流行的网络通信应用程序接口之一。90年代初,由Sun Microsystems,JSB Corporation,FTP software,Microdyne和Microsoft等几家公司共同制定了一套标准,即Windows Sockets规范。Windows Sockets API是Microsoft Windows的网络程序设计接口,它在继承了Berkeley Sockets主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Windows消息驱动特性的网络事件异步选择机制。这些扩充有利于应用程序开发者编制符合Windows编程模式的软件,它使在Windows下开发高性能的网络通信程序成为可能。Socket实际上是指一个通信端点,借助于它,用户所开发的Socket应用程序,可以通过网络与其它Socket应用程序进行通信。近年来,随着计算机网络与Windows 95的流行,许多用户所开发的应用程序需要实现网络间的数据通信。2.2.2开发Windows Sockets网络通信程序的软、硬件环境所采用的操作系统软件可以是Windows XP,Windows 7,因为它们都支持Windows Sockets API,在以下的介绍中,我们将以在Windows XP环境下的开发为例。 所采用的编程语言一般可选目前较流行使用的可视化和采用面向对象技术的Microsoft Visual C+ 6.0。Visual C+ 6.0可在Windows XP或Windows 7环境下运行,其开发系统增加了全面集成的基于Windows 的开发工具以及一个基于传统C/C+开发过程的“可视化”用户界面驱动模型。Visual C+ 6.0中的Microsoft基类(MFC,即Microsoft Foundation Class)库是一系列C+类,其中封装着为Microsoft Windows操作系统系列编写应用程序的各种功能 。在有关套接字方面,Visual C+ 6.0对原来的Windows Sockets库函数进行了一系列封装,继而产生了CSocket 、CSocketFile等类,它们封装着有关Socket的各种功能。 所采用的网络通信协议一般是TCP / IP。Windows XP和Windows 7都带有该协议。但是,所开发的网络通信应用程序并不能直接与TCP / IP核心打交道,而是与网络应用编程界面Windows Sockets API打交道。Windows Sockets API则可直接与TCP/IP核心进行沟通。TCP / IP核心协议连同网络物理介质(如网卡)一起,都是提供网络应用程序间相互通信的设施。2.2.3CSocket类编程模型使用CSocket对象涉及CArchive和CSocketFile 类对象。以下介绍的针对字节流型套接字的操作步骤中,只有第三步对于客户方和服务方操作是不同的,其他步骤都相同。 (1)构造一个CSocket对象。 (2)使用这个对象的Create()成员函数产生一个socket对象。在客户方程序中,除非需要数据报套接字,Create()函数一般情况下应该使用默认参数。而对于服务方程序,必须在调用Create时指定一个端口。需要注意的是,Carchive类对象不能与数据报(UDP)套接字一起工作,因此对于数据报套接字,CAsyncSocket和CSocket 的使用方法是一样的。 (3)如果是客户方套接字,则调用CAsyncSocket Connect()函数与服务方套接字连接;如果是服务方套接字,则调用CAsyncSocketListen()开始监听来自客户方的连接请求,收到连接请求后,调用CAsyncSocketAccept()函数接受请求,建立连接。请注意Accept()成员函数需要一个新的并且为空的CSocket对象作为它的参数,解释同上。 (4)产生一个CSocketFile对象,并把它与CSocket 对象关联起来。(5)为接收和发送数据各产生一个CArchive 对象,把它们与CSocketFile对象关联起来。切记CArchive是不能和数据报套接字一起工作的。 (6)使用CArchive对象的Read()、Write()等函数在客户与服务方传送数据。(7)通讯完毕后,销毁CArchive、CSocketFile和CSocket对象。2.2.4用VC6.0进行Windows Sockets程序开发的技术要点(1)同常规编程一样,无论服务器方还是客户方应用程序都要进行所谓的初始化处理,这部分工作仍可采用消息驱动机制来先期完成。 (2)一般情况下,网络通信程序是某应用程序中的一模块。在单独调试网络通信程序时,要尽量与采用该通信模块的其它应用程序开发者约定好,统一采用一种界面形式,即单文档界面SDI、多文档界面MDI和基于对话框界面中的一种(这在使用AppWizard形成项目Project文件时有提示),尽管这并非必须,但可使通信模块在移植到所需的应用程序时省时省力,因为Visual C+ 6.0这种可视化语言在给我们提供方便的同时,也给我们带来某些不便,譬如所形成的项目文件中的许多相关文件与所采用的界面形式密切联系,许多消息驱动功能,随所采用的界面形式不同而各异。 当然,也可将通信模块函数化,并形成一个动态连接库文件(DLL文件),供主程序调用。 (3)以通信程序作为其中一个模块的应用程序往往不是在等待数据发送或接收完之后再做其它工作,因而在主程序中要采用多线程(Multithreaded)技术。即将数据的发或收,放在一个具有一定优先级(一般宜取较高优先级)的辅助线程中,在数据发或收期间,主程序仍可进行其它工作,譬如利用上一个周期收到的数据绘制曲线 。Visual C+ 6.0中的MFC提供了许多有关启动线程、管理线程、同步化线程、终止线程等功能函数。(4)在许多情况下,要求通信模块应实时地收、发数据。譬如调用之的主程序以0.5秒为一周期,在这段时间内 ,要进行如下工作:接收数据,利用收到的数据进行运算,将运算结果发送到其它计算机节点,周而复始。我们在充分利用Windows Sockets的基于消息的网络事件异步选择机制,用消息来驱动数据的发送和接收的基础上,结合使用其他措施,如将数据的收和发放在高优先级线程,在软件设计上,安排好时序,尽量避免在同一时间内,双方都在向对方发送大量数据的情况发生,保证网络要有足够的带宽等,成功地实现了数据传输的实时性。2.3 TCP/IP协议概述TCP/IP协议(Transfer Control Protocol/Internet Protocol)指传输控制/网络协议,又叫网络通讯协议。这个协议作为网络中使用的基本协议,是Internet国际互联网络的基础。TCP/IP协议是包括上百个协议,其中包括很多功能:TCP(Transfer Control Protocol)传输控制协议,IP(Internet Protocol)互联网协议,UDP(User Datagram Protocol)用户数据报协议,ICMP(Internet Control Message Protocol)互联网控制信息协议,FTP(File Transfer Protocol)文件传输协议,SMTP(Simle Mail Transfer Protocol)简单邮件传输协议,SNMP(simle Network Manage Protocol)简单网络管理协议,ARP(Address Resolution Protocol)地址解析协议等。从分层模型方面来讲,TCP/IP由四个层次组成:链路层、网络层、传输层、应用层。每一层负责不同的功能:(1)链路层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口。用于处理与电缆等其他任何传输媒介的物理接口细节。(2)网络层,即互联网层,通常处理分组网络中的活动,例如分组的路由选择。网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。(3)运输层,为两台主机上的应用程序提供点对点活端到端的通信。在TCP/IP协议组件中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而UDP则为应用层来提供。(4)应用层,负责处理特定的程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序。l Telnet远程登录l FTP文件传输协议l SMTP简单邮件传输协议l SNMP简单网络管理协议第3章 软件需求分析3.1需求分析3.1.1功能需求分析(1)用户端的基本聊天信息发送,这些基本聊天信息包括文本和图片。文本和图片聊天是聊天软件最基础的功能。用户通过输入IP来查找用户,并申请加为好友,在对方同意加为好友后,在线用户列表就会更新用户,把加入的用户添加到用户列表中。这样,两个用户之前就可以实现通信了。在信息传输中,预计利用TCP/IP协议中的UDP协议,这是面向无连接的协议,但发送速度快,用于聊天信息传输用适合。(2)用户端文件传输的功能,用户之间可以断点续传文件。在传文件之前,首先创建一信息文件,记录文件传送的一些信息,并根据传输的数据量实时修改。如果没有传完,下次就可以继续打开这个信息文件,接着上次的进度传输。因为文件传输入要求数据不能出错,因此此模块采用TCP协议。(3)用户端之间白板和聊天室的功能,这个功能有些类似远程会议内容的传输,研究目的是为了满足企业内部随时性小会议室的要求。通过聊天室满足交流讨论,通过白板让发起者将想要表达的内容,清楚的给目标对象呈现出来。(4)用户之间后台的连接,每个用户隔指定一段时间会向用户列表中的每一用户发送消息,查看用户是否在线,如果不在线,就更新用户列表,删除用户。3.1.2数据需求分析(1)客户端之间聊天信息。在控件上显示时格式化,更易于用户的查看自己发送或接收到的信息。(2)在线用户列表信息。服务器端存放在适当的空间中,在发送给客户端时,对信息列表进行格式化,便于客户端提取信息。(3)客户端向服务器端发送的确认在线信息。包括客户端刚刚启动时的初始化信息和在使用过程中的确认在线信息。(4)其它程序内部可能需要设计的数据结构体。3.1.3性能需求分析(1)可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失败、服务器不在线等,可以提示用户安全退出本程序,在出现不可知的错误以后,可以尽量安全的退出程序。在程序的设计过程中,要求能尽可能多的设想到用户使用过程中可能发生的事件,并能在判断事件后做出相应的处理,使程序具有较高的容错性能。(2)宜操作性,程序简单易懂,容易上手使用。设计界面是,简化界面的复杂性,模拟QQ等现有即时通讯工具的界面,使用户能很容易看懂并使用。(3)开发文档易理解,保证以后自己二次开发或他人接手开发时,能够清晰的理解整个系统的设计思路和实现细节。(4)模块化设计此软件的功能,不同的模块实现不同的功能,使得软件易于以后的维护与扩展,在以后可以更好的完善本软件的功能,更方便于在工作中的应用。3.1.4运行需求分析(1)用户界面程序较小,启动速度快,无启动界面。在本地局域网中使用,所以无需进行用户登录,无需认证界面,启动后的应用界面要清爽,设计要简单明了,要具有较高的易用性。(2)故障处理在遇到可预知的故障与情况时,能提示用户并自动退出;在遇到不可预知的故障时能安全退出。3.2 可行性分析软件可行性分析最根本的任务是对以后的行动方针提出建议。如果问题没有可行的解释,分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费。3.2.1 经济可行性分析由于本软件的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,注重的是自身水平和能力的提高。而且对自身的经济要求也不高,只要有一台到两台可开发程序软件的电脑便可,所以不用考虑到经济问题。3.2.2 技术可行性分析首先我已经搭建好开发所需要的软硬件平台,并进行了合理而完善的需求分析,做好了充分的前期准备工作,其次因为本程序的平台将基于WINDOWS,将要使用网络通信技术,而WINDOWS有完善成熟的网络通信接口,以及与VC+6.0开发环境的严密契合能力,加之相类似的更大规模的INTERNET通信工具产品也已有例在先,所以这个程序的开发可行性在技术上是完全可行的。3.2.3 运行可行性分析 本软件为一个小型的基于局域网的通信软件,所耗费的资源是非常小的,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本软件在运行上是可行的。第4章软件系统设计本章将从两个方面介绍本系统的设计。第一,介绍本软件的概要设计。第二,介绍本软件的详细设计。详细设计是先从基本框架的设计出发,然后逐步介绍好友管理模块、聊天模块、聊天室模块、传送文件模块、白板模块。所以本章是本论文的重点。4.1概要设计根据以上的软件需求分析,可对本软件进行如下的功能模块划分,总体功能如图4-1所示。总体功能传输文件白板聊天室发送基本聊天信息保持连接发送图片信息发送文本信息图4-1总体功能框图本软件的总体功能主要划分为五个模块:(1) 基本聊天模块:两个用户端的基本聊天信息发送,这些基本聊天信息包括文本和图片。本模块目的是为两个用户提供基本的聊天环境。(2) 聊天室模块:多个用户端的基本聊天信息的发送,聊天信息只能是文本信息。本模块目的是为多个用户提供基本的聊天环境。(3) 白板模块:多个用户端之间的白板信息传送。这个白板就是一个画板,多个用户建立连接之后,可通过此白板模块达到信息共享的目的。建立连接的多个用户都在看同一块白板,在上面画的图、写的内容,都可以马上会呈现给其他用户。(4) 传输文件模块:用户端文件传输的功能,使用户之间可以进行文件传输。本文件传输功能用可以支持断点续传文件。(5)用户之间后台的连接,每个用户隔指定一段时间会向用户列表中的每一用户发送消息,查看用户是否在线,如果不在线,就更新用户列表,删除用户。4.2基本框架设计本节内容将介绍本软件的基本框架设计,包括宏和数据结构的定义、程序的配置文件、调试模块、主页面初始化相关内容、主页面的布局以及其自会按钮和自绘好友列表等基本框架相关内容。4.2.1宏和数据结构的定义程序中用到了很多宏和数据结构,这些宏和数据结构在多个模块中都有用到,因此程序中专门新建一个头文件Global.h,此头文件里是程序中很多的宏和数据结构的定义。在StdAfx.h文件包含Global.h,在程序其他地方都可以使用Global.h中的宏和定义的数据结构。这样处理还有一个好处,如果需要修改某些宏的值,可以直接在Global.h中修改,而不用到处去找宏的定义,方便和快捷。4.2.2程序配置文件程序中很多信息需要保存,比如用户名和热键,因些程序用到了配置文件,默认的配置文件名为conf.ini。程序用读取和写入配置文件系列函数来管理此配置文件。4.2.3调试模块为了方便调试,在程序中添加了一个用于调试的类CDebug,它具有的成员变量和成员函数如下:class CDebug private:CStringm_strMessage;/ 信息public:CDebug();CDebug( CString strMessage );virtual CDebug();期中构造和析构函数如下:CDebug:CDebug( CString strMessage )m_strMessage = strMessage;CString strTrace;strTrace = run in : + m_strMessage + n;TRACE( strTrace );CDebug:CDebug()CString strTrace;strTrace = run out : + m_strMessage + n;TRACE( strTrace );利用类的构造、析构函数和类的生命周期,我们可以很方便的设计如上的CDebug类,用法如下:CDebug debug( “test” );在函数或语句组的开始处定义一个CDebug变量,当程序运行到变量定义处的时候,会打印出run in : test,当程序执行完函数或语句组时,会打印出run out : test,这样我们就可以知道程序运行到何处,极大的方便了我们对程序的调试。 4.2.4主界面初始化用过QQ的人都知道,QQ主面板总是处于其他程序的上面,而且QQ在任务栏没有图标,而是把图标放到了托盘区,另外,我们还可以按Ctrl+Alt+Z默认的快捷键隐藏和显示QQ主面板。不但QQ是这样处理的,很多聊天软件都采用此种处理方式。本设计也不例外,同样也要达到这样的目的。下面从各个方面来说明本设计的处理方式:(1)不在任务栏显示图标CDialog dlgParent;dlgParent.Create( IDD_DIALOG_BG );dlgParent.ShowWindow( SW_HIDE );CInstantMessagingDlg dlg( &dlgParent );m_pMainWnd = &dlg;ModifyStyleEx( WS_EX_APPWINDOW, 0 );上面代码就达到了使程序主界面不在任务栏中显示的目的。首先,我们创建一个对话框,并隐藏此对放框,然后把这个对话框作为主界面对话框的父窗口,然后在主界面对话框的初始化函数中修改其风格,去掉WS_EX_APPWINDOW风格。这样,主界面就不会出现在任务栏里面了。(2)将主界面放在最上层将程序放到顶层,很多程序都有这功能,比如金山词霸等,实现起来其实很简单,只用一条语句就可以达到目的:SetWindowPos( &wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );第一个参数就是将程序放到所有非顶层窗口的顶层,如果有多个程序都是顶层窗口,那么他们谁在上面,就要看当前谁是激活的窗口。最后一个参数,是用位或组后起来的,从字面意思上我们就能理解到这是不移动不改变大小的意思,忽略了当中的4个参数。(3)热键的处理设计中默认的热键是Ctrl+Alt+Z,当然程序允许用户自己定义热键,自定义的热键将保存在conf.ini文件中。热键的功能可以隐藏、显示主界面,有消息到达时,按热键也可以打开聊天对话框。:RegisterHotKey( m_hWnd, IDHOTKEY, m_wModifiers, m_wVirtualKeyCode );使用全局函数RegisterHotKey可以注册热键,如果注册的热键没有被其他程序占用,那么注册成功。注册成功后,如果按热键,那么程序就会接受到WM_HOTKEY消息,因此我们还需要自己处理WM_HOTKEY消息:void OnHotkey( WPARAM wParam, LPARAM lParam );BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog)ON_MESSAGE( WM_HOTKEY, OnHotkey )/AFX_MSG_MAPEND_MESSAGE_MAP()在消息映射中,我们用OnHotkey()函数来处理WM_HOTKEY消息。void CInstantMessagingDlg:OnHotkey( WPARAM wParam, LPARAM lParam )if( this-IsWindowVisible() )ShowWindow( SW_HIDE );elseShowWindow( SW_SHOW );:SetForegroundWindow( m_hWnd );在OnHotkey()函数中判断主界面是否是可见的,如果是可见的那么隐藏起来,否则显示,并且把主界面设为前景窗口。(4)最小化和关闭按钮的处理我们希望单击程序右上角的最小化按钮时,程序隐藏起来,而单击关闭按钮时,程序会提示是否退出,而不会悄无声息的退出。void CInstantMessagingDlg:OnSysCommand(UINT nID, LPARAM lParam)if( nID = SC_MINIMIZE )this-ShowWindow( SW_HIDE);elseCDialog:OnSysCommand(nID, lParam);void CInstantMessagingDlg:OnCancel() if( IDOK = MessageBox( 要退出吗?, 退出, MB_OKCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON2 ) )DestroyWindow();在程序中处理OnSysCommand()函数和OnCancel ()函数就实现了我们要的功能。(5)托盘图标的显示至此,程序已不在任务栏显示图标,已是最顶层窗口,而且也已有热键功能,但是还没有实现托盘图标的显示。实现托盘图标的代码如下:NOTIFYICONDATAm_nid;HICON hIcon= AfxGetApp()-LoadIcon( STATE_ONLINE );m_nid.hIcon= hIcon;m_nid.hWnd= m_hWnd;m_nid.cbSize= sizeof( NOTIFYICONDATA );m_nid.uCallbackMessage= WM_SHELLNOTIFY;m_nid.uFlags= NIF_ICON | NIF_MESSAGE | NIF_TIP;m_nid.uID= IDR_MENU1;sprintf( m_nid.szTip, 即时聊天软件 );Shell_NotifyIcon( NIM_ADD, &m_nid );这样我们就在托盘区显示了STATE_ONLINE的图标,把鼠标移动到图标上一会,还会出现“即时聊天软件”的提示框。如果你们对图标有单击和双击等操作,程序会收到WM_SHELLNOTIFY消息,因此,我们还必须处理WM_SHELLNOTIFY消息。void OnShellNotifyProc( WPARAM wParam, LPARAM lParam );BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog)/AFX_MSG_MAP(CInstantMessagingDlg)ON_MESSAGE( WM_SHELLNOTIFY, OnShellNotifyProc )/AFX_MSG_MAPEND_MESSAGE_MAP()void CInstantMessagingDlg:OnShellNotifyProc( WPARAM wParam, LPARAM lParam )if( lParam = WM_LBUTTONDBLCLK )else if( lParam = WM_RBUTTONUP )与热键处理一样,OnShellNotifyProc()函数响应我们对图标的操作,其中lParam参数表示消息号,在本设计中只处理左键双击(显示主界面)和右键单击(弹出菜单)。在托盘添加图标,退出程序前,如果没有从托盘删除图标,那么托盘区的图标会一直保留下来,直到鼠标移过托盘区引起托盘区的重绘,这当然不是我们所希望的结果。void CInstantMessagingDlg:OnDestroy() / 删除在托盘建立的图标:Shell_NotifyIcon( NIM_DELETE, &m_nid );CDialog:OnDestroy();以上代码在程序退出时调用,从托盘从删除图标。(6)只允许运行唯一实例这点与QQ不同,在一台机子上可以运行多个QQ,但本程序只允许运行一个实例。只允许运行一个实例,有多种方法,本设计采用的是创建命名事件的方法:HANDLE hEvent = :CreateEvent( NULL, FALSE, FALSE, InstantMessaging );if( hEvent )if( ERROR_ALREADY_EXISTS = GetLastError() )return FALSE;事件与普通变量不一样,普通变量只在运行的当前程序中有效,而事件在整个系统中都有效。当首次运行程序时,会创建一个名为“InstantMessaging”的事件,这个事件在系统范围内有效,当再次运行程序时,程序会尝试着创建同名的事件,因为之前已经创建了这个事件,因此系统会返回之前创建事件的句柄,但GetLastError()会返回ERROR_ALREADY_EXISTS,表明需创建的事件之前已经创建,为了保证只允许一个实例,这个实例就不再允许运行,直接返回,退出程序。4.2.5主界面布局程序主界面如图4-1所示。图4-1主界面左上角显示的是自己的头像、状态和昵称;右上角的列表框是查找IP输入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物质管理考试题及答案
- 统计学思维导图的试题及答案
- 深度解析2024年公务员省考考题变化试题及答案
- 2024年CPBA知识整合试题及答案
- 湖北省部分高中联考协作体2022-2023学年高一下学期期中生物试题(含答案)
- 汽车美容师考试行业前景展望试题及答案
- 新技术在汽车美容中的应用及试题与答案
- 班组长安全试题及答案
- 商业分析师考试互动练习试题及答案
- 车辆性能与检测知识试题及答案
- 中医治疗失眠课件
- 中国地区划分区域表
- 2024年山东济南高新控股集团有限公司招聘笔试参考题库含答案解析
- 医务人员的肺结核防护指南与培训
- 二手乘用车出口检验规范
- 室分系统培训材料
- 眼镜各部件英语知识点梳理汇总
- 2023年江西省海昏文化旅游发展有限责任公司招聘笔试题库含答案解析
- 安全风险告知卡(一般吊装作业)
- YS/T 682-2008钌粉
- GB/T 902.3-2008储能焊用焊接螺柱
评论
0/150
提交评论