计算机优秀毕业论文设计

上传人:仙*** 文档编号:84708927 上传时间:2022-05-04 格式:DOC 页数:72 大小:877.50KB
返回 下载 相关 举报
计算机优秀毕业论文设计_第1页
第1页 / 共72页
计算机优秀毕业论文设计_第2页
第2页 / 共72页
计算机优秀毕业论文设计_第3页
第3页 / 共72页
点击查看更多>>
资源描述
word本科毕业设计(论文)题目名称:基于VC+的企业内部通信软件的设计与实现 学 院: 计算机科学与技术 专业年级: 计算机科学与技术 学生某某:班级学号:指导教师:二一四 年 六 月 六 日67 / 72摘 要八十年代初,美国政府的高级研究工程机构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 munication Development an API (application program interface). This API is called Socket Interface (socket). Today, SOCKET interface is a TCP / IP network of the most mon API, is the INTERNET application development on the most mon API.With the development of network technology and the demand of peoples life, network munication has been more and more get the favor of people. This topic is to develop an internal munication 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 munication programming API interface, also is the standard of Windows network programming.The main content of the research is how to use the socket network munication program, mainly pleted 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 munication目录摘 要IAbstractII第1章 绪 论11.1 课题选题背景11.2 国内外现状分析和研究成果11.3 课题研究内容与意义2第2章相关技术概述32.1 开发环境32.1.1 开发工具简介32.1.2 Visual C+ MFC概述32.2 WinSock网络编程32.2.1Socket简介42.2.2开发Windows Sockets网络通信程序的软、硬件环境42.2.3CSocket类编程模型52.2.4用VC6.0进展Windows Sockets程序开发的技术要点52.3 TCP/IP协议概述6第3章 软件需求分析73.1需求分析73.1.1功能需求分析73.1.2数据需求分析73.1.3性能需求分析73.1.4运行需求分析83.2 可行性分析83.2.1 经济可行性分析83.2.2 技术可行性分析83.2.3 运行可行性分析8第4章软件系统设计94.1概要设计94.2根本框架设计104.2.1宏和数据结构的定义104.2.2程序配置文件104.2.3调试模块104.2.4主界面初始化114.2.5主界面布局154.2.6自绘按钮164.2.7自绘好友列表框184.3好友管理194.3.1添加好友194.3.2删除好友214.3.3与好友保持连接224.4聊天模块234.5聊天室模块264.6传送文件模块294.7共享屏幕模块324.8白板模块34第5章 软件测试365.1 软件测试的目的365.2 软件测试方法分类365.2.1 静态测试与动态测试365.2.2 黑盒测试与白盒测试365.2.3 测试中的错误分类375.3 通讯软件测试385.3.1 测试用例设计要求385.3.2 聊天模块测试用例385.4 测试总结38结 论40致 谢41参考文献42附 录43第1章 绪 论1.1 课题选题背景近年来,随着全球信息化的不断开展,网络也在飞速开展。我们都知道局域网的存在,特别是在大型企业,比如银行、公安机关等等对网络安全要求特别严格的企业单位都会有自己的局域网,因为局域网的安全可靠,使其不容易受到网络病毒的攻击,所以局域网得以在企业之中广泛应用。然而,任何企业的内部都是离不开通讯的,所以企业内部通信软件就应运而生了。这种通信软件是专为局域网通信而开发的,它适用于局域网,同时也促进了局域网的开展,局域网开展又给通信软件带来了更多应用的机会,可以说,局域网通信工具和局域网二者之间相辅相成,相互促进。开展到今天,大多数企业都应用了局域网,可见其在当今社会的重要地位。应用局域网办公的企业,必须要有自己企业内部的通讯软件,然而,现在,在广域网上,可盈利的通讯软件到处都是,而局域网内的通讯软件却很少,在功能上,也是参差不齐。因此,为了企业更好、更安全的通讯,我想到开发一款适用于企业的局域网通信软件,恰好通过我的大学所学,我有信心在教师的讲解和指导下,很好的完成这任务。最后,教师为我选定了基于VC+企业内部通信软件的设计与实现这一题目。1.2 国内外现状分析和研究成果即时通讯工具是目前使用最为普遍的网络应用软件之一,继 出现在我们的计算机上之后,网易、新浪、搜狐等知名公司也迫不与待地参加了这一领域的竞争,而微软、雅虎、AOL的国际巨头公司也一刻没有停止自己扩X的脚步。国内在使用的最普与的就是腾讯 ,微软的MSN也受到商务人士的青睐;国外主要使用的是由美国在线出的ICQ、AMI以与微软的MSN等。目前,windows平台方面的即时通讯软件已经很多,但是其他系统的比拟少,例如Linux平台,虽然有类似 方面的一些产品,比如Linux 、Luna ,但是数量毕竟不多且功能界面等都还不太理想;面向企业的即时通讯软件虽然比拟多,但是除了 、微软等公司的产品,其他的产品都还比拟年轻,推出时间较短,且用户较少。鉴于此种情况,很多公司都在开发新的即时通讯工具软件,利用新的技术开发,使客户端和服务器端的性能和功能都得到一定的提升,适合在企业内部网络和互联网上运行,同时使其具备跨平台的特性,方便在各个系统上运行。另外,许多企业已经应用了即时通讯类产品作为内部交流的平台。但绝大多数企事业单位只把即时通讯类产品作为边缘产品,没有充分的认识到即时通讯类产品在工作中的重要作用,没有想过去如何正确的应用。还有许多企事业单位使用网络个人交流工具如 ,MSN,但存在许多安全隐患。许多开发商并没有将此产品作为公司的重点,也并没有从客户的角度出发,只是在产品线上附加即时通讯产品,做的不够完善,使此产品沦为边缘产品,从而导致即时通讯产品市场萎缩。随着我们国家的信息化飞速开展,许多企事业单位信息化程度大幅度提高。企事业单位非常需要使用内部即时通讯产品来提高工作效率。1.3 课题研究内容与意义为了保障通信安全,建设内网、专网是一个解决这一问题的方法,随着企业业务X围的不断扩大,网络规模也在扩大,采用该方案的话,本钱必然非常高。由于公众信息网是对整个社会开放的公众根底网络,具有覆盖性X围广、速度快、费用低、使用方便等特点,但同时却存在着安全性差的问题。用户通过公众信息网来传输的信息,在传输的过程中可能被窃取、篡改和伪造,信息的安全性和可靠性因此会大大的降低,所以内网、专网还是不可缺少的。在通信工具上,我们习惯了通过类似于 ,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概述MFCMicrosoft 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规X。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协议是包括上百个协议,其中包括很多功能:TCPTransfer Control Protocol传输控制协议,IPInternet Protocol互联网协议,UDPUser Datagram Protocol用户数据报协议,ICMPInternet Control Message Protocol互联网控制信息协议,FTPFile Transfer Protocol文件传输协议,SMTPSimle Mail Transfer Protocol简单传输协议,SNMPsimle Network Manage Protocol简单网络管理协议,ARPAddress 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宜操作性,程序简单易懂,容易上手使用。设计界面是,简化界面的复杂性,模拟 等现有即时通讯工具的界面,使用户能很容易看懂并使用。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主界面初始化用过 的人都知道, 主面板总是处于其他程序的上面,而且 在任务栏没有图标,而是把图标放到了托盘区,另外,我们还可以按Ctrl+Alt+Z默认的快捷键隐藏和显示 主面板。不但 是这样处理的,很多聊天软件都采用此种处理方式。本设计也不例外,同样也要达到这样的目的。下面从各个方面来说明本设计的处理方式: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:OnSysmand(UINT nID, LPARAM lParam)if( nID = SC_MINIMIZE )this-ShowWindow( SW_HIDE);elseCDialog:OnSysmand(nID, lParam);void CInstantMessagingDlg:OnCancel() if( IDOK = MessageBox( 要退出吗?, 退出, MB_OKCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON2 ) )DestroyWindow();在程序中处理OnSysmand()函数和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只允许运行唯一实例这点与 不同,在一台机子上可以运行多个 ,但本程序只允许运行一个实例。只允许运行一个实例,有多种方法,本设计采用的是创建命名事件的方法:HANDLE hEvent = :CreateEvent( NULL, FALSE, FALSE, InstantMessaging );if( hEvent )if( ERROR_ALREADY_EXISTS = GetLastError() )return FALSE;事件与普通变量不一样,普通变量只在运行的当前程序中有效,而事件在整个系统中都有效。当首次运行程序时,会创建一个名为“InstantMessaging的事件,这个事件在系统X围内有效,当再次运行程序时,程序会尝试着创建同名的事件,因为之前已经创建了这个事件,因此系统会返回之前创建事件的句柄,但GetLastError()会返回ERROR_ALREADY_EXISTS,明确需创建的事件之前已经创建,为了保证只允许一个实例,这个实例就不再允许运行,直接返回,退出程序。4.2.5主界面布局程序主界面如图4-1所示。图4-1主界面左上角显示的是自己的头像、状态和昵称;右上角的列表框是查找IP输入框,下面是添加按钮;在下面一点的列表框是自己的址列表框,显示了自己的所有IP;主界面中央是用户列表框;最下面是4个功能按钮。用户列表框是一列一列的显示添加的好友,最左边是好友的头像;中部上边是好友的昵称,下面是好友的IP;右下角是删除好友按钮和摄像头按钮,当然好友必须有摄像头才会显示摄像头按钮。有两种方式添加联系人:1在右上解的查找IP输入框里输入IP,然后单击下面的添加按钮。也可以从IP输入框里选择以前加过的好友IP。程序允许保存10个最近联系人的IP,当新添加联系人时,如果已保存了10个联系人的IP,程序会按照时间的先后顺序覆盖之前的IP。在列表框展开下拉列表后,可以按DELETE键删除选定的IP。2选定一个自己的IP,然后单击“网段按钮。此功能可以向选定IP的IP段发送添加请求的消息,这相当于批量添加好友的功能。在主界面任何地点单击左键不放开,可以拖动程序;单击右键,会弹出菜单,用户选中相应的菜单项,可以执行相应的功能;在任何地点双击左键,可以打开“个人设置对话框,如图4-2所示。图4-2设置对话框最后一项“允许别人直接将我加为联系的意思是别人添加我为好友时,不会弹出请求对话框而直接加为好友。单击保存后,此对话框里的内容会保存到config.ini配置文件中。运行程序后,会从config.ini读取用户信息,并在主界面中作相应的设置。在主界面,添加、聊天室、传送文件和白板按钮都是自绘按钮,可以显示图片,有提示能力,当鼠标移动到其上一会儿后,会弹出提示框,而且这些按钮都具有XP风格,既鼠标滑过时会显示不同的状态。用户列表框也是自绘的,普通的列表控件无法显示我们所需的信息。自绘按钮和自绘列表框会作为一个单独的模块来介绍,这儿就不作过多的介绍。4.2.6自绘按钮VC+6.0自带的按钮控件不具有XP风格,而且也不能显示图像,作为一款好的软件,应该有个好的界面。在程序的主界面上,主要的按钮都采用了自绘按钮,而不使用自带的按钮控件。AdvButton.h和AdvButton.cpp是自绘按钮类的头文件和实现文件。在自绘按钮类中定义了如下成员变量:intm_nState;/ 按钮的状态CBitmapm_bmpNormal;/ 正常图标CBitmapm_bmpHover;/ 焦点图标CBitmapm_bmpDown;/ 按如下图标CBitmapm_bmpDisable;/ 无效图标CToolTipCtrlm_pToolTipCtrl;/ 提示类m_nState表示当前按钮的状态,可以为宏:NORMAL,HOVER,DOWN,DISABLE,分别表示按钮正常状态、处于焦点状态、按下状态、无效状态,这4个宏的定义在实现文件。4个CBitmap的变量分别存储4种状态下的图像。m_pToolTipCtrl是提示工具控件类,既是鼠标在其上时,会弹出提示窗口。要实现按钮自绘,必须更新按钮的风格为自绘,可以在按钮的属性中更改,也可以使用代码更改。重载PreSubclassWindow(),在这个函数中更改按钮风格并初始化m_pToolTipCtrl。void CAdvButton:PreSubclassWindow() ModifyStyle( 0, BS_OWNERDRAW );CButton:PreSubclassWindow();m_pToolTipCtrl.Create( this, TTS_ALWAYSTIP );m_pToolTipCtrl.SetDelayTime( 100 );CString strText;GetWindowText( strText );m_pToolTipCtrl.AddTool( this, strText ); VC+6.0中的ClassWizard不能为我们添加鼠标离开的消息,只能为我们添加鼠标移动、单击等消息,我们得自己为自绘按钮添加上鼠标离开的消息。TRACKMOUSEEVENT tme;tme.cbSize = sizeof( TRACKMOUSEEVENT );tme.hwndTrack = m_hWnd;tme.dwFlags = TME_LEAVE;:_TrackMouseEvent( &tme );以上代码告诉系统,当鼠标离开m_hWnd窗口时,向这个窗口发送一条WM_MOUSELEAVE消息。下面的处理方式与热键和托盘通知消息的处理方式一样,自定义这个消息处理函数就行了。自绘按钮必须重载DrawItem()函数,在DrawItem()函数中根据m_nState的值可以贴上不同的图,表示按钮的一不同状态。void CAdvButton:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) if( lpDrawItemStruct-itemState & ODS_DISABLED )m_nState = DISABLE;switch( m_nState )case NORMAL:DrawNORMAL();break;case HOVER:DrawHOVER();break;case DOWN:DrawDOWN();break;case DISABLE:DrawDISABLE();break;default:break;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!