影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

計算機優(yōu)秀畢業(yè)論文設(shè)計

上傳人:仙*** 文檔編號:84708927 上傳時間:2022-05-04 格式:DOC 頁數(shù):72 大?。?77.50KB
收藏 版權(quán)申訴 舉報 下載
計算機優(yōu)秀畢業(yè)論文設(shè)計_第1頁
第1頁 / 共72頁
計算機優(yōu)秀畢業(yè)論文設(shè)計_第2頁
第2頁 / 共72頁
計算機優(yōu)秀畢業(yè)論文設(shè)計_第3頁
第3頁 / 共72頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《計算機優(yōu)秀畢業(yè)論文設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《計算機優(yōu)秀畢業(yè)論文設(shè)計(72頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、word 本科畢業(yè)設(shè)計(論文) 題目名稱:基于VC++的企業(yè)內(nèi)部通信軟件的設(shè)計與實現(xiàn) 學 院: 計算機科學與技術(shù) 專業(yè)年級: 計算機科學與技術(shù) 學生某某: 班級學號: 指導(dǎo)教師: 二○一四 年 六 月 六 日 67 / 72 摘 要 八十年代初,美國政府的高級研究工程機構(gòu)〔ARPA〕給加利福尼亞大學Berkeley分校提供了資金,讓他們在UNIX操作系統(tǒng)下實現(xiàn)TCP/IP協(xié)議。在這個項目中,研究人員為TCP/IP網(wǎng)絡(luò)通信開發(fā)了一個API〔應(yīng)用程序接口〕。這個

2、API稱為Socket接口〔套接字〕。今天,SOCKET接口是TCP/IP網(wǎng)絡(luò)最為通用的API,也是在INTERNET上進展應(yīng)用開發(fā)最為通用的API。 隨著網(wǎng)絡(luò)技術(shù)的開展與人們生活的需求,網(wǎng)絡(luò)通信已越來越受到人們的親睞。本課題是開發(fā)一個基于UDP的企業(yè)內(nèi)部通信系統(tǒng),既可以應(yīng)用于封閉的局域網(wǎng)環(huán)境下,也可以在互聯(lián)網(wǎng)的環(huán)境下使用。本軟件是基于VC++6.0開發(fā)的,采用軟件工程的方法,應(yīng)用了程序設(shè)計技術(shù)、網(wǎng)絡(luò)技術(shù),運用了WINSOCK相關(guān)API接口。WINSOCK 是在Windows進展網(wǎng)絡(luò)通信編程的API接口,也是Windows網(wǎng)絡(luò)編程的標準。研究的主要內(nèi)容是如何利用套接字編寫網(wǎng)絡(luò)通信程序,主要完

3、成了客戶端的發(fā)送信息,發(fā)送圖片與顯示在線用戶與多人聊天,文件傳輸?shù)裙ぷ?。文件傳輸功能是本軟件系統(tǒng)的一個亮點,它可以讓兩個用戶之間實現(xiàn)文件的傳遞。通過聊天工具的使用,讓分布在不同地點、使用不同機器的一組用戶能夠與時進展信息交流,以達到信息共享的目的,從而提高工作或者生活效率。通過測試,本軟件操作簡單,靈活性好,運行也比擬穩(wěn)定,可以廣泛使用。 關(guān)鍵字 : UDP;VC++6.0;WINSOCK;網(wǎng)絡(luò)通信 Abstract The early 80s, the U.S. government's Advanced Research Project agency (ARPA) to the

4、 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, SO

5、CKET 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 people's life, network munication has been more and more get the favor of people. This topic is to develop an internal

6、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

7、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 onli

8、ne 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 excha

9、nge 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 munica

10、tion 目錄 摘 要I AbstractII 第1章 緒 論1 1.1 課題選題背景1 1.2 國內(nèi)外現(xiàn)狀分析和研究成果1 1.3 課題研究內(nèi)容與意義2 第2章 相關(guān)技術(shù)概述3 2.1 開發(fā)環(huán)境3 2.1.1 開發(fā)工具簡介3 2.1.2 Visual C++ MFC概述3 2.2 WinSock網(wǎng)絡(luò)編程3 2.2.1 Socket簡介4 2.2.2 開發(fā)Windows Sockets網(wǎng)絡(luò)通信程序的軟、硬件環(huán)境4 2.2.3 CSocket類編程模型5 2.2.4 用VC6.0進展Windows Sockets程序開發(fā)的技術(shù)要點5

11、2.3 TCP/IP協(xié)議概述6 第3章 軟件需求分析7 3.1 需求分析7 3.1.1 功能需求分析7 3.1.2 數(shù)據(jù)需求分析7 3.1.3 性能需求分析7 3.1.4 運行需求分析8 3.2 可行性分析8 3.2.1 經(jīng)濟可行性分析8 3.2.2 技術(shù)可行性分析8 3.2.3 運行可行性分析8 第4章 軟件系統(tǒng)設(shè)計9 4.1 概要設(shè)計9 4.2 根本框架設(shè)計10 4.2.1 宏和數(shù)據(jù)結(jié)構(gòu)的定義10 4.2.2 程序配置文件10 4.2.3 調(diào)試模塊10 4.2.4 主界面初始化11 4.2.5 主界面布局15 4.2.6 自繪按鈕16 4

12、.2.7 自繪好友列表框18 4.3 好友管理19 4.3.1 添加好友19 4.3.2 刪除好友21 4.3.3 與好友保持連接22 4.4 聊天模塊23 4.5 聊天室模塊26 4.6 傳送文件模塊29 4.7 共享屏幕模塊32 4.8 白板模塊34 第5章 軟件測試36 5.1 軟件測試的目的36 5.2 軟件測試方法分類36 5.2.1 靜態(tài)測試與動態(tài)測試36 5.2.2 黑盒測試與白盒測試36 5.2.3 測試中的錯誤分類37 5.3 通訊軟件測試38 5.3.1 測試用例設(shè)計要求38 5.3.2 聊天模塊測試用例38 5.4

13、 測試總結(jié)38 結(jié) 論40 致 謝41 參考文獻42 附 錄43 第1章 緒 論 1.1 課題選題背景 近年來,隨著全球信息化的不斷開展,網(wǎng)絡(luò)也在飛速開展。我們都知道局域網(wǎng)的存在,特別是在大型企業(yè),比如銀行、公安機關(guān)等等對網(wǎng)絡(luò)安全要求特別嚴格的企業(yè)單位都會有自己的局域網(wǎng),因為局域網(wǎng)的安全可靠,使其不容易受到網(wǎng)絡(luò)病毒的攻擊,所以局域網(wǎng)得以在企業(yè)之中廣泛應(yīng)用。然而,任何企業(yè)的內(nèi)部都是離不開通訊的,所以企業(yè)內(nèi)部通信軟件就應(yīng)運而生了。這種通信軟件是專為局域網(wǎng)通信而開發(fā)的,它適用于局域網(wǎng),同時也促進了局域網(wǎng)的開展,局域網(wǎng)開展又給通信軟件帶來了更多應(yīng)用的機會,

14、可以說,局域網(wǎng)通信工具和局域網(wǎng)二者之間相輔相成,相互促進。開展到今天,大多數(shù)企業(yè)都應(yīng)用了局域網(wǎng),可見其在當今社會的重要地位。應(yīng)用局域網(wǎng)辦公的企業(yè),必須要有自己企業(yè)內(nèi)部的通訊軟件,然而,現(xiàn)在,在廣域網(wǎng)上,可盈利的通訊軟件到處都是,而局域網(wǎng)內(nèi)的通訊軟件卻很少,在功能上,也是參差不齊。因此,為了企業(yè)更好、更安全的通訊,我想到開發(fā)一款適用于企業(yè)的局域網(wǎng)通信軟件,恰好通過我的大學所學,我有信心在教師的講解和指導(dǎo)下,很好的完成這任務(wù)。最后,教師為我選定了基于VC++企業(yè)內(nèi)部通信軟件的設(shè)計與實現(xiàn)這一題目。 1.2 國內(nèi)外現(xiàn)狀分析和研究成果 即時通訊工具是目前使用最為普遍的網(wǎng)絡(luò)應(yīng)用軟件之一,繼 出現(xiàn)

15、在我們的計算機上之后,網(wǎng)易、新浪、搜狐等知名公司也迫不與待地參加了這一領(lǐng)域的競爭,而微軟、雅虎、AOL的國際巨頭公司也一刻沒有停止自己擴X的腳步。國內(nèi)在使用的最普與的就是騰訊 ,微軟的MSN也受到商務(wù)人士的青睞;國外主要使用的是由美國在線出的ICQ、AMI以與微軟的MSN等。 目前,windows平臺方面的即時通訊軟件已經(jīng)很多,但是其他系統(tǒng)的比擬少,例如Linux平臺,雖然有類似 方面的一些產(chǎn)品,比如Linux 、Luna ,但是數(shù)量畢竟不多且功能界面等都還不太理想;面向企業(yè)的即時通訊軟件雖然比擬多,但是除了 、微軟等公司的產(chǎn)品,其他的產(chǎn)品都還比擬年輕,推出時間較短,且用

16、戶較少。鑒于此種情況,很多公司都在開發(fā)新的即時通訊工具軟件,利用新的技術(shù)開發(fā),使客戶端和服務(wù)器端的性能和功能都得到一定的提升,適合在企業(yè)內(nèi)部網(wǎng)絡(luò)和互聯(lián)網(wǎng)上運行,同時使其具備跨平臺的特性,方便在各個系統(tǒng)上運行。 另外,許多企業(yè)已經(jīng)應(yīng)用了即時通訊類產(chǎn)品作為內(nèi)部交流的平臺。但絕大多數(shù)企事業(yè)單位只把即時通訊類產(chǎn)品作為邊緣產(chǎn)品,沒有充分的認識到即時通訊類產(chǎn)品在工作中的重要作用,沒有想過去如何正確的應(yīng)用。還有許多企事業(yè)單位使用網(wǎng)絡(luò)個人交流工具〔如 ,MSN〕,但存在許多安全隱患。許多開發(fā)商并沒有將此產(chǎn)品作為公司的重點,也并沒有從客戶的角度出發(fā),只是在產(chǎn)品線上附加即時通訊產(chǎn)品,做的不夠完善,使此產(chǎn)品淪

17、為邊緣產(chǎn)品,從而導(dǎo)致即時通訊產(chǎn)品市場萎縮。 隨著我們國家的信息化飛速開展,許多企事業(yè)單位信息化程度大幅度提高。企事業(yè)單位非常需要使用內(nèi)部即時通訊產(chǎn)品來提高工作效率。 1.3 課題研究內(nèi)容與意義 為了保障通信安全,建設(shè)內(nèi)網(wǎng)、專網(wǎng)是一個解決這一問題的方法,隨著企業(yè)業(yè)務(wù)X圍的不斷擴大,網(wǎng)絡(luò)規(guī)模也在擴大,采用該方案的話,本錢必然非常高。由于公眾信息網(wǎng)是對整個社會開放的公眾根底網(wǎng)絡(luò),具有覆蓋性X圍廣、速度快、費用低、使用方便等特點,但同時卻存在著安全性差的問題。用戶通過公眾信息網(wǎng)來傳輸?shù)男畔?,在傳輸?shù)倪^程中可能被竊取、篡改和偽造,信息的安全性和可靠性因此會大大的降低,所以內(nèi)網(wǎng)、專網(wǎng)還是不可缺少的

18、。   在通信工具上,我們習慣了通過類似于 ,MSN之類的程序軟件和天南地北的朋友聊天、發(fā)信息,不過所有聊天程序都需要Internet的支持,因此它們無法在局域網(wǎng)內(nèi)部大顯身手,那么是否想到過要讓單位內(nèi)部的員工,寢室周圍的同學,不用上Internet就可以輕松體驗到內(nèi)網(wǎng)通訊的樂趣呢?有了這種想法,本課題的研究內(nèi)容——開發(fā)局域網(wǎng)通信軟件就有了必要性,讓單位員工或者寢室同學不出內(nèi)網(wǎng)就能自由通信。   企業(yè)內(nèi)部通信軟件是一個即時通信工具。因此,通過該軟件的設(shè)計和開發(fā),可以對自己所學習的知識進展了一次綜合提高,并且會有更深層次的理解和掌握,在這個過程中,還能激發(fā)自己的學習潛力,提高軟件開發(fā)的能力

19、,加深對網(wǎng)絡(luò)協(xié)議和Windows環(huán)境下網(wǎng)絡(luò)編程的理解和掌握,所以,開發(fā)企業(yè)內(nèi)部通信軟件在理論和實踐上都有非常重要的意義。 第2章相關(guān)技術(shù)概述 2.1 開發(fā)環(huán)境 本節(jié)主要介紹本軟件系統(tǒng)的開發(fā)環(huán)境,以與運用的編程工具等。 2.1.1 開發(fā)工具簡介 本系統(tǒng)采用Windows 7中文操作系統(tǒng),包含Windows API的支持,使用面向?qū)ο蟮木幊坦ぞ遃isual C++ 6.0進展項目開發(fā)。他是一款面向?qū)ο蟮墓δ軓姶蟮目梢暬幊涕_發(fā)工具。使用Vissual C++可以完成任何C語言和C++語言的程序。其中的MFC庫集成了Windows Sockets API應(yīng)用程序接口,使得用戶可以用面向

20、對象的方法直接調(diào)用。AppWizard可以用來生成初步的框架文件,資源編輯器用于幫助直觀地設(shè)計用戶接口,CLassWizard用來協(xié)助添加代碼到框架文件,并且提供文檔/視圖結(jié)構(gòu)支持,從而使用應(yīng)用程序開發(fā)變得輕松。 2.1.2 Visual C++ MFC概述 MFC〔Microsoft Foundation Class Library〕庫是Microsoft公司基于Windows的C++應(yīng)用程序編程接口,是Visual C++中編寫Windows應(yīng)用程序的首選方法。MFC是一組C++類,這些是由常用的Windows應(yīng)用程序定制的。使用MFC,可以在任何時候調(diào)用Win32函數(shù)、最大程度地利

21、用Windows。而且,基于MFC的程序不僅小巧而且運行速度快,這是因為Visual C++非常接近Windows的底層,所以編譯器所編譯出來的程序質(zhì)量相當?shù)母?,從而保證了Visual C++編寫出來的軟件產(chǎn)品擁有高效率的運行速度。MFC中的各種類結(jié)合起來構(gòu)成了一個應(yīng)用程序框架,它的目的就是讓程序員在此根底上來建立Windows下的應(yīng)用程序,這是一種相對SDK來事更為簡單的方法。因為在總體上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標準實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓。 2.2 WinSock網(wǎng)絡(luò)編程 Windows Socke

22、ts是從Berkeley Sockets擴展而來的,其在繼承Berkeley Sockets的根底上,又進展了新的擴大。這些擴大主要是提供了一些異步函數(shù),并增加了符合WINDOWS消息驅(qū)動特性的網(wǎng)絡(luò)事件異步選擇機制。 Windows Sockets由兩局部組成:開發(fā)組件和運行組件。 開發(fā)組件:Windows Sockets 實現(xiàn)文檔、應(yīng)用程序接口(API)引入庫和一些頭文件。 運行組件:Windows Sockets 應(yīng)用程序接口的動態(tài)庫(WINSOCK.DLL)。 2.2.1 Socket簡介 套接字〔Socket〕最初是由加利福尼亞大學Berkeley分校為UNIX操作系統(tǒng)開發(fā)的

23、網(wǎng)絡(luò)通信接口,隨著UNIX操作系統(tǒng)的廣泛使用,套接字成為當前最流行的網(wǎng)絡(luò)通信應(yīng)用程序接口之一。90年代初,由Sun Microsystems,JSB Corporation,F(xiàn)TP software,Microdyne和Microsoft等幾家公司共同制定了一套標準,即Windows Sockets規(guī)X。 Windows Sockets API是Microsoft Windows的網(wǎng)絡(luò)程序設(shè)計接口,它在繼承了Berkeley Sockets主要特征的根底上,又對它進展了重要擴大。這些擴大主要是提供了一些異步函數(shù),并增加了符合Windows消息驅(qū)動特性的網(wǎng)絡(luò)事件異步選擇機制。這些擴大有利于應(yīng)用

24、程序開發(fā)者編制符合Windows編程模式的軟件,它使在Windows下開發(fā)高性能的網(wǎng)絡(luò)通信程序成為可能。 Socket實際上是指一個通信端點,借助于它,用戶所開發(fā)的Socket應(yīng)用程序,可以通過網(wǎng)絡(luò)與其它Socket應(yīng)用程序進展通信。 近年來,隨著計算機網(wǎng)絡(luò)與Windows 95的流行,許多用戶所開發(fā)的應(yīng)用程序需要實現(xiàn)網(wǎng)絡(luò)間的數(shù)據(jù)通信。 2.2.2 開發(fā)Windows Sockets網(wǎng)絡(luò)通信程序的軟、硬件環(huán)境 所采用的操作系統(tǒng)軟件可以是Windows XP,Windows 7,因為它們都支持Windows Sockets API,在以下的介紹中,我們將以在Windows XP環(huán)境下的開

25、發(fā)為例。 所采用的編程語言一般可選目前較流行使用的可視化和采用面向?qū)ο蠹夹g(shù)的Microsoft Visual C++ 6.0。Visual C++ 6.0可在Windows XP或Windows 7環(huán)境下運行,其開發(fā)系統(tǒng)增加了全面集成的基于Windows 的開發(fā)工具以與一個基于傳統(tǒng)C/C++開發(fā)過程的“可視化〞用戶界面驅(qū)動模型。Visual C++ 6.0中的Microsoft基類〔MFC,即Microsoft Foundation Class)庫是一系列C++類,其中封裝著為Microsoft Windows操作系統(tǒng)系列編寫應(yīng)用程序的各種功能 。在有關(guān)套接字方面,Visual C++ 6

26、.0對原來的Windows Sockets庫函數(shù)進展了一系列封裝,繼而產(chǎn)生了CSocket 、CSocketFile等類,它們封裝著有關(guān)Socket的各種功能。 所采用的網(wǎng)絡(luò)通信協(xié)議一般是TCP / IP。Windows XP和Windows 7都帶有該協(xié)議。但是,所開發(fā)的網(wǎng)絡(luò)通信應(yīng)用程序并不能直接與TCP / IP核心打交道,而是與網(wǎng)絡(luò)應(yīng)用編程界面Windows Sockets API打交道。Windows Sockets API如此可直接與TCP/IP核心進展溝通。TCP / IP核心協(xié)議連同網(wǎng)絡(luò)物理介質(zhì)〔如網(wǎng)卡〕一起,都是提供網(wǎng)絡(luò)應(yīng)用程序間相互通信的設(shè)施。 2.2.3 CSocke

27、t類編程模型 使用CSocket對象涉與CArchive和CSocketFile 類對象。以下介紹的針對字節(jié)流型套接字的操作步驟中,只有第三步對于客戶方和服務(wù)方操作是不同的,其他步驟都一樣。 〔1〕構(gòu)造一個CSocket對象。 〔2〕使用這個對象的Create()成員函數(shù)產(chǎn)生一個socket對象。在客戶方程序中,除非需要數(shù)據(jù)報套接字,Create()函數(shù)一般情況下應(yīng)該使用默認參數(shù)。而對于服務(wù)方程序,必須在調(diào)用Create時指定一個端口。需要注意的是,Carchive類對象不能與數(shù)據(jù)報〔UDP〕套接字一起工作,因此對于數(shù)據(jù)報套接字,CAsyncSocket和CSocket 的使用方法是

28、一樣的。 〔3〕如果是客戶方套接字,如此調(diào)用CAsyncSocket ∷Connect()函數(shù)與服務(wù)方套接字連接;如果是服務(wù)方套接字,如此調(diào)用CAsyncSocket∷Listen()開始監(jiān)聽來自客戶方的連接請求,收到連接請求后,調(diào)用CAsyncSocket∷Accept()函數(shù)承受請求,建立連接。請注意Accept()成員函數(shù)需要一個新的并且為空的CSocket對象作為它的參數(shù),解釋同上。 〔4〕產(chǎn)生一個CSocketFile對象,并把它與CSocket 對象關(guān)聯(lián)起來。 〔5〕為接收和發(fā)送數(shù)據(jù)各產(chǎn)生一個CArchive 對象,把它們與CSocketFile對象關(guān)聯(lián)起來。切記CArc

29、hive是不能和數(shù)據(jù)報套接字一起工作的。 〔6〕使用CArchive對象的Read()、Write()等函數(shù)在客戶與服務(wù)方傳送數(shù)據(jù)。 〔7〕通訊完畢后,銷毀CArchive、CSocketFile和CSocket對象。 2.2.4 用VC6.0進展Windows Sockets程序開發(fā)的技術(shù)要點 〔1〕同常規(guī)編程一樣,無論服務(wù)器方還是客戶方應(yīng)用程序都要進展所謂的初始化處理,這局部工作仍可采用消息驅(qū)動機制來先期完成。 〔2〕一般情況下,網(wǎng)絡(luò)通信程序是某應(yīng)用程序中的一模塊。在單獨調(diào)試網(wǎng)絡(luò)通信程序時,要盡量與采用該通信模塊的其它應(yīng)用程序開發(fā)者約定好,統(tǒng)一采用一種界面形式,即單文檔界面S

30、DI、多文檔界面MDI和基于對話框界面中的一種〔這在使用AppWizard形成項目[Project]文件時有提示〕,盡管這并非必須,但可使通信模塊在移植到所需的應(yīng)用程序時省時省力,因為Visual C++ 6.0這種可視化語言在給我們提供方便的同時,也給我們帶來某些不便,譬如所形成的項目文件中的許多相關(guān)文件與所采用的界面形式密切聯(lián)系,許多消息驅(qū)動功能,隨所采用的界面形式不同而各異。 當然,也可將通信模塊函數(shù)化,并形成一個動態(tài)連接庫文件(DLL文件〕,供主程序調(diào)用。 〔3〕以通信程序作為其中一個模塊的應(yīng)用程序往往不是在等待數(shù)據(jù)發(fā)送或接收完之后再做其它工作,因而在主程序中要采用多線程〔Mult

31、ithreaded〕技術(shù)。即將數(shù)據(jù)的發(fā)或收,放在一個具有一定優(yōu)先級〔一般宜取較高優(yōu)先級〕的輔助線程中,在數(shù)據(jù)發(fā)或收期間,主程序仍可進展其它工作,譬如利用上一個周期收到的數(shù)據(jù)繪制曲線 。Visual C++ 6.0中的MFC提供了許多有關(guān)啟動線程、管理線程、同步化線程、終止線程等功能函數(shù)。 〔4〕在許多情況下,要求通信模塊應(yīng)實時地收、發(fā)數(shù)據(jù)。譬如調(diào)用之的主程序以0.5秒為一周期,在這段時間內(nèi) ,要進展如下工作:接收數(shù)據(jù),利用收到的數(shù)據(jù)進展運算,將運算結(jié)果發(fā)送到其它計算機節(jié)點,周而復(fù)始。我們在充分利用Windows Sockets的基于消息的網(wǎng)絡(luò)事件異步選擇機制,用消息來驅(qū)動數(shù)據(jù)的發(fā)送和接收的根

32、底上,結(jié)合使用其他措施,如將數(shù)據(jù)的收和發(fā)放在高優(yōu)先級線程,在軟件設(shè)計上,安排好時序,盡量防止在同一時間內(nèi),雙方都在向?qū)Ψ桨l(fā)送大量數(shù)據(jù)的情況發(fā)生,保證網(wǎng)絡(luò)要有足夠的帶寬等,成功地實現(xiàn)了數(shù)據(jù)傳輸?shù)膶崟r性。 2.3 TCP/IP協(xié)議概述 TCP/IP協(xié)議〔Transfer Control Protocol/Internet Protocol〕指傳輸控制/網(wǎng)絡(luò)協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議。這個協(xié)議作為網(wǎng)絡(luò)中使用的根本協(xié)議,是Internet國際互聯(lián)網(wǎng)絡(luò)的根底。 TCP/IP協(xié)議是包括上百個協(xié)議,其中包括很多功能:TCP〔Transfer Control Protocol〕傳輸控制協(xié)議,IP〔Inte

33、rnet Protocol〕互聯(lián)網(wǎng)協(xié)議,UDP〔User Datagram Protocol〕用戶數(shù)據(jù)報協(xié)議,ICMP〔Internet Control Message Protocol〕互聯(lián)網(wǎng)控制信息協(xié)議,F(xiàn)TP〔File Transfer Protocol〕文件傳輸協(xié)議,SMTP〔Simle Mail Transfer Protocol〕簡單傳輸協(xié)議,SNMP〔simle Network Manage Protocol〕簡單網(wǎng)絡(luò)管理協(xié)議,ARP〔Address Resolution Protocol〕地址解析協(xié)議等。 從分層模型方面來講,TCP/IP由四個層次組成:鏈路層、網(wǎng)絡(luò)層、傳輸層

34、、應(yīng)用層。每一層負責不同的功能: 〔1〕鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動程序和計算機中對應(yīng)的網(wǎng)絡(luò)接口。用于處理與電纜等其他任何傳輸媒介的物理接口細節(jié)。 〔2〕網(wǎng)絡(luò)層,即互聯(lián)網(wǎng)層,通常處理分組網(wǎng)絡(luò)中的活動,例如分組的路由選擇。網(wǎng)絡(luò)層協(xié)議包括IP協(xié)議〔網(wǎng)際協(xié)議〕,ICMP協(xié)議〔Internet互聯(lián)網(wǎng)控制報文協(xié)議〕,以與IGMP協(xié)議〔Internet組管理協(xié)議〕。 〔3〕運輸層,為兩臺主機上的應(yīng)用程序提供點對點活端到端的通信。在TCP/IP協(xié)議組件中,有兩個互不一樣的傳輸協(xié)議:TCP〔傳輸控制協(xié)議〕和UDP〔用戶數(shù)據(jù)報協(xié)議〕。TCP為兩臺主機提供高可靠性的數(shù)據(jù)通信。由于運輸層提供了高可靠性

35、的端到端的通信,因此應(yīng)用層可以忽略所有這些細節(jié)。而UDP如此為應(yīng)用層來提供。 〔4〕應(yīng)用層,負責處理特定的程序細節(jié)。幾乎各種不同的TCP/IP實現(xiàn)都會提供下面這些通用的應(yīng)用程序。 l Telnet遠程登錄 l FTP文件傳輸協(xié)議 l SMTP簡單傳輸協(xié)議 l SNMP簡單網(wǎng)絡(luò)管理協(xié)議 第3章 軟件需求分析 3.1 需求分析 3.1.1 功能需求分析 〔1〕用戶端的根本聊天信息發(fā)送,這些根本聊天信息包括文本和圖片。文本和圖片聊天是聊天軟件最根底的功能。用戶通過輸入IP來查找用戶,并申請加為好友,在對方同意加為好友后,在線用戶列表就會更新用戶,把參加的用戶添加到用戶列表中。

36、這樣,兩個用戶之前就可以實現(xiàn)通信了。在信息傳輸中,預(yù)計利用TCP/IP協(xié)議中的UDP協(xié)議,這是面向無連接的協(xié)議,但發(fā)送速度快,用于聊天信息傳輸用適合。 〔2〕用戶端文件傳輸?shù)墓δ?,用戶之間可以斷點續(xù)傳文件。在傳文件之前,首先創(chuàng)建一信息文件,記錄文件傳送的一些信息,并根據(jù)傳輸?shù)臄?shù)據(jù)量實時修改。如果沒有傳完,下次就可以繼續(xù)打開這個信息文件,接著上次的進度傳輸。因為文件傳輸入要求數(shù)據(jù)不能出錯,因此此模塊采用TCP協(xié)議。 〔3〕用戶端之間白板和聊天室的功能,這個功能有些類似遠程會議內(nèi)容的傳輸,研究目的是為了滿足企業(yè)內(nèi)部隨時性小會議室的要求。通過聊天室滿足交流討論,通過白板讓發(fā)起者將想要表達的內(nèi)容,

37、清楚的給目標對象呈現(xiàn)出來。 〔4〕用戶之間后臺的連接,每個用戶隔指定一段時間會向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線,如果不在線,就更新用戶列表,刪除用戶。 3.1.2 數(shù)據(jù)需求分析 〔1〕客戶端之間聊天信息。在控件上顯示時格式化,更易于用戶的查看自己發(fā)送或接收到的信息。 〔2〕在線用戶列表信息。服務(wù)器端存放在適當?shù)目臻g中,在發(fā)送給客戶端時,對信息列表進展格式化,便于客戶端提取信息。 〔3〕客戶端向服務(wù)器端發(fā)送確實認在線信息。包括客戶端剛剛啟動時的初始化信息和在使用過程中確實認在線信息。 〔4〕其它程序內(nèi)部可能需要設(shè)計的數(shù)據(jù)結(jié)構(gòu)體。 3.1.3 性能需求分析 〔1〕可

38、靠性高,能在由于系統(tǒng)問題或其它原因產(chǎn)生錯誤后,作出相對應(yīng)處理,比如網(wǎng)絡(luò)初始化失敗、服務(wù)器不在線等,可以提示用戶安全退出本程序,在出現(xiàn)不可知的錯誤以后,可以盡量安全的退出程序。在程序的設(shè)計過程中,要求能盡可能多的設(shè)想到用戶使用過程中可能發(fā)生的事件,并能在判斷事件后做出相應(yīng)的處理,使程序具有較高的容錯性能。 〔2〕宜操作性,程序簡單易懂,容易上手使用。設(shè)計界面是,簡化界面的復(fù)雜性,模擬 等現(xiàn)有即時通訊工具的界面,使用戶能很容易看懂并使用。 〔3〕開發(fā)文檔易理解,保證以后自己二次開發(fā)或他人接手開發(fā)時,能夠清晰的理解整個系統(tǒng)的設(shè)計思路和實現(xiàn)細節(jié)。 〔4〕模塊化設(shè)計此軟件的功能,不同的模塊實現(xiàn)

39、不同的功能,使得軟件易于以后的維護與擴展,在以后可以更好的完善本軟件的功能,更方便于在工作中的應(yīng)用。 3.1.4 運行需求分析 〔1〕用戶界面 程序較小,啟動速度快,無啟動界面。在本地局域網(wǎng)中使用,所以無需進展用戶登錄,無需認證界面,啟動后的應(yīng)用界面要清爽,設(shè)計要簡單明了,要具有較高的易用性。 〔2〕故障處理 在遇到可預(yù)知的故障與情況時,能提示用戶并自動退出;在遇到不可預(yù)知的故障時能安全退出。 3.2 可行性分析 軟件可行性分析最根本的任務(wù)是對以后的行動方針提出建議。如果問題沒有可行的解釋,分析員應(yīng)該建議停止這項開發(fā)工程,以防止時間、資源、人力和金錢的浪費。 3.2.1 經(jīng)

40、濟可行性分析 由于本軟件的主要背景是畢業(yè)課程設(shè)計,不注重直接的經(jīng)濟效益和其后的開展方向,注重的是自身水平和能力的提高。而且對自身的經(jīng)濟要求也不高,只要有一臺到兩臺可開發(fā)程序軟件的電腦便可,所以不用考慮到經(jīng)濟問題。 3.2.2 技術(shù)可行性分析 首先我已經(jīng)搭建好開發(fā)所需要的軟硬件平臺,并進展了合理而完善的需求分析,做好了充分的前期準備工作,其次因為本程序的平臺將基于WINDOWS,將要使用網(wǎng)絡(luò)通信技術(shù),而WINDOWS有完善成熟的網(wǎng)絡(luò)通信接口,以與與VC++6.0開發(fā)環(huán)境的嚴密契合能力,加之相類似的更大規(guī)模的INTERNET通信工具產(chǎn)品也已有例在先,所以這個程序的開發(fā)可行性在技術(shù)上是完全可

41、行的。 3.2.3 運行可行性分析 本軟件為一個小型的基于局域網(wǎng)的通信軟件,所消耗的資源是非常小的,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本軟件在運行上是可行的。 第4章 軟件系統(tǒng)設(shè)計 本章將從兩個方面介紹本系統(tǒng)的設(shè)計。第一,介紹本軟件的概要設(shè)計。第二,介紹本軟件的詳細設(shè)計。詳細設(shè)計是先從根本框架的設(shè)計出發(fā),然后逐步介紹好友管理模塊、聊天模塊、聊天室模塊、傳送文件模塊、白板模塊。所以本章是本論文的重點。 4.1 概要設(shè)計 根據(jù)以上的軟件需求分析,可對本軟件進展如下的功能模塊劃分,總體功能如圖4-1所示。 總體功能 傳輸 文件 白板

42、 聊天室 發(fā)送根本聊天信息 保持連接 發(fā)送圖片信息 發(fā)送文本信息 圖4-1 總體功能框圖 本軟件的總體功能主要劃分為五個模塊: (1) 根本聊天模塊:兩個用戶端的根本聊天信息發(fā)送,這些根本聊天信息包括文本和圖片。本模塊目的是為兩個用戶提供根本的聊天環(huán)境。 (2) 聊天室模塊:多個用戶端的根本聊天信息的發(fā)送,聊天信息只能是文本信息。本模塊目的是為多個用戶提供根本的聊天環(huán)境。 (3) 白板模塊:多個用戶端之間的白板信息傳送。這個白板就是一個畫板,多個用戶建立連接之后,可通過此白板模塊達到信息共享的目的。建立連接的多個用戶都在看同一塊白板,在上面

43、畫的圖、寫的內(nèi)容,都可以馬上會呈現(xiàn)給其他用戶。 (4) 傳輸文件模塊:用戶端文件傳輸?shù)墓δ埽褂脩糁g可以進展文件傳輸。本文件傳輸功能用可以支持斷點續(xù)傳文件。 〔5〕用戶之間后臺的連接,每個用戶隔指定一段時間會向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線,如果不在線,就更新用戶列表,刪除用戶。 4.2 根本框架設(shè)計 本節(jié)內(nèi)容將介紹本軟件的根本框架設(shè)計,包括宏和數(shù)據(jù)結(jié)構(gòu)的定義、程序的配置文件、調(diào)試模塊、主頁面初始化相關(guān)內(nèi)容、主頁面的布局以與其自會按鈕和自繪好友列表等根本框架相關(guān)內(nèi)容。 4.2.1 宏和數(shù)據(jù)結(jié)構(gòu)的定義 程序中用到了很多宏和數(shù)據(jù)結(jié)構(gòu),這些宏和數(shù)據(jù)結(jié)構(gòu)在多個模塊中都有用

44、到,因此程序中專門新建一個頭文件Global.h,此頭文件里是程序中很多的宏和數(shù)據(jù)結(jié)構(gòu)的定義。在StdAfx.h文件包含Global.h,在程序其他地方都可以使用Global.h中的宏和定義的數(shù)據(jù)結(jié)構(gòu)。這樣處理還有一個好處,如果需要修改某些宏的值,可以直接在Global.h中修改,而不用到處去找宏的定義,方便和快捷。 4.2.2 程序配置文件 程序中很多信息需要保存,比如用戶名和熱鍵,因些程序用到了配置文件,默認的配置文件名為conf.ini。程序用讀取和寫入配置文件系列函數(shù)來管理此配置文件。 4.2.3 調(diào)試模塊 為了方便調(diào)試,在程序中添加了一個用于調(diào)試的類CDebug,它具有的成員

45、變量和成員函數(shù)如下: class CDebug { private: CStringm_strMessage;/// 信息 public: CDebug(); CDebug( CString strMessage ); virtual ~CDebug(); }; 期中構(gòu)造和析構(gòu)函數(shù)如下: CDebug::CDebug( CString strMessage ) { m_strMessage = strMessage; CString strTrace; strTrace = "run in : " + m_strMessage + "\n"; TRACE(

46、 strTrace ); } CDebug::~CDebug() { CString strTrace; strTrace = "run out : " + m_strMessage + "\n"; TRACE( strTrace ); } 利用類的構(gòu)造、析構(gòu)函數(shù)和類的生命周期,我們可以很方便的設(shè)計如上的CDebug類,用法如下: { CDebug debug( “test〞 ); } 在函數(shù)或語句組的開始處定義一個CDebug變量,當程序運行到變量定義處的時候,會打印出run in : test,當程序執(zhí)行完函數(shù)或語句組時,會打印出run out : test,這樣

47、我們就可以知道程序運行到何處,極大的方便了我們對程序的調(diào)試。 4.2.4 主界面初始化 用過 的人都知道, 主面板總是處于其他程序的上面,而且 在任務(wù)欄沒有圖標,而是把圖標放到了托盤區(qū),另外,我們還可以按Ctrl+Alt+Z默認的快捷鍵隱藏和顯示 主面板。不但 是這樣處理的,很多聊天軟件都采用此種處理方式。本設(shè)計也不例外,同樣也要達到這樣的目的。 下面從各個方面來說明本設(shè)計的處理方式: 〔1〕不在任務(wù)欄顯示圖標 CDialog dlgParent; dlgParent.Create( IDD_DIALOG_BG ); dlgParent.ShowWindo

48、w( SW_HIDE ); CInstantMessagingDlg dlg( &dlgParent ); m_pMainWnd = &dlg; ModifyStyleEx( WS_EX_APPWINDOW, 0 ); 上面代碼就達到了使程序主界面不在任務(wù)欄中顯示的目的。首先,我們創(chuàng)建一個對話框,并隱藏此對放框,然后把這個對話框作為主界面對話框的父窗口,然后在主界面對話框的初始化函數(shù)中修改其風格,去掉WS_EX_APPWINDOW風格。這樣,主界面就不會出現(xiàn)在任務(wù)欄里面了。 〔2〕將主界面放在最上層 將程序放到頂層,很多程序都有這功能,比如金山詞霸等,實現(xiàn)起來其實很簡單,只用一條語

49、句就可以達到目的: SetWindowPos( &wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); 第一個參數(shù)就是將程序放到所有非頂層窗口的頂層,如果有多個程序都是頂層窗口,那么他們誰在上面,就要看當前誰是激活的窗口。最后一個參數(shù),是用位或|組后起來的,從字面意思上我們就能理解到這是不移動不改變大小的意思,忽略了當中的4個參數(shù)。 〔3〕熱鍵的處理 設(shè)計中默認的熱鍵是Ctrl+Alt+Z,當然程序允許用戶自己定義熱鍵,自定義的熱鍵將保存在conf.ini文件中。熱鍵的功能可以隱藏、顯示主界面,有消息到達時,按熱鍵也可以打開聊天對話框。

50、 ::RegisterHotKey( m_hWnd, IDHOTKEY, m_wModifiers, m_wVirtualKeyCode ); 使用全局函數(shù)RegisterHotKey可以注冊熱鍵,如果注冊的熱鍵沒有被其他程序占用,那么注冊成功。注冊成功后,如果按熱鍵,那么程序就會承受到WM_HOTKEY消息,因此我們還需要自己處理WM_HOTKEY消息: void OnHotkey( WPARAM wParam, LPARAM lParam ); BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog) … ON_MESSAGE( WM_HO

51、TKEY, OnHotkey ) … //}}AFX_MSG_MAP END_MESSAGE_MAP() 在消息映射中,我們用OnHotkey()函數(shù)來處理WM_HOTKEY消息。 void CInstantMessagingDlg::OnHotkey( WPARAM wParam, LPARAM lParam ) { if( this->IsWindowVisible() ) { ShowWindow( SW_HIDE ); } else { ShowWindow( SW_SHOW ); ::SetForegroundWindow( m_hWnd ); } }

52、 在OnHotkey()函數(shù)中判斷主界面是否是可見的,如果是可見的那么隱藏起來,否如此顯示,并且把主界面設(shè)為前景窗口。 〔4〕最小化和關(guān)閉按鈕的處理 我們希望單擊程序右上角的最小化按鈕時,程序隱藏起來,而單擊關(guān)閉按鈕時,程序會提示是否退出,而不會悄無聲息的退出。 void CInstantMessagingDlg::OnSysmand(UINT nID, LPARAM lParam) { … if( nID == SC_MINIMIZE ) { this->ShowWindow( SW_HIDE); } else { CDialog::OnSysmand(nID, l

53、Param); } } void CInstantMessagingDlg::OnCancel() { if( IDOK == MessageBox( "要退出嗎?", "退出", MB_OKCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON2 ) ) { … DestroyWindow(); } } 在程序中處理OnSysmand()函數(shù)和OnCancel ()函數(shù)就實現(xiàn)了我們要的功能。 〔5〕托盤圖標的顯示 至此,程序已不在任務(wù)欄顯示圖標,已是最頂層窗口,而且也已有熱鍵功能,但是還沒有實現(xiàn)托盤圖標的顯示。實現(xiàn)托盤圖標的代碼如下:

54、 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, "即時聊天軟

55、件" ); Shell_NotifyIcon( NIM_ADD, &m_nid ); 這樣我們就在托盤區(qū)顯示了STATE_ONLINE的圖標,把鼠標移動到圖標上一會,還會出現(xiàn)“即時聊天軟件〞的提示框。如果你們對圖標有單擊和雙擊等操作,程序會收到WM_SHELLNOTIFY消息,因此,我們還必須處理WM_SHELLNOTIFY消息。 void OnShellNotifyProc( WPARAM wParam, LPARAM lParam ); BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog) //{{AFX_MSG_MAP(CInstan

56、tMessagingDlg) … ON_MESSAGE( WM_SHELLNOTIFY, OnShellNotifyProc ) … //}}AFX_MSG_MAP END_MESSAGE_MAP() void CInstantMessagingDlg::OnShellNotifyProc( WPARAM wParam, LPARAM lParam ) { if( lParam == WM_LBUTTONDBLCLK ) { … } else if( lParam == WM_RBUTTONUP ) { … } } 與熱鍵處理一樣,OnShellNotifyP

57、roc()函數(shù)響應(yīng)我們對圖標的操作,其中l(wèi)Param參數(shù)表示消息號,在本設(shè)計中只處理左鍵雙擊〔顯示主界面〕和右鍵單擊〔彈出菜單〕。 在托盤添加圖標,退出程序前,如果沒有從托盤刪除圖標,那么托盤區(qū)的圖標會一直保存下來,直到鼠標移過托盤區(qū)引起托盤區(qū)的重繪,這當然不是我們所希望的結(jié)果。 void CInstantMessagingDlg::OnDestroy() { /// 刪除在托盤建立的圖標 ::Shell_NotifyIcon( NIM_DELETE, &m_nid ); CDialog::OnDestroy(); } 以上代碼在程序退出時調(diào)用,從托盤從刪除圖標。 〔6〕只

58、允許運行唯一實例 這點與 不同,在一臺機子上可以運行多個 ,但本程序只允許運行一個實例。只允許運行一個實例,有多種方法,本設(shè)計采用的是創(chuàng)建命名事件的方法: HANDLE hEvent = ::CreateEvent( NULL, FALSE, FALSE, "InstantMessaging" ); if( hEvent ) { if( ERROR_ALREADY_EXISTS == GetLastError() ) { return FALSE; } } 事件與普通變量不一樣,普通變量只在運行的當前程序中有效,而事件在整個系統(tǒng)中都有效。當首次運行程序時,會創(chuàng)建一個

59、名為“InstantMessaging〞的事件,這個事件在系統(tǒng)X圍內(nèi)有效,當再次運行程序時,程序會嘗試著創(chuàng)建同名的事件,因為之前已經(jīng)創(chuàng)建了這個事件,因此系統(tǒng)會返回之前創(chuàng)建事件的句柄,但GetLastError()會返回ERROR_ALREADY_EXISTS,明確需創(chuàng)建的事件之前已經(jīng)創(chuàng)建,為了保證只允許一個實例,這個實例就不再允許運行,直接返回,退出程序。 4.2.5 主界面布局 程序主界面如圖4-1所示。 圖4-1 主界面 左上角顯示的是自己的頭像、狀態(tài)和昵稱;右上角的列表框是查找IP輸入框,下面是添加按鈕;在下面一點的列表框是自己的址列表框,顯示了自己的所有IP;主界面中央是用

60、戶列表框;最下面是4個功能按鈕。 用戶列表框是一列一列的顯示添加的好友,最左邊是好友的頭像;中部上邊是好友的昵稱,下面是好友的IP;右下角是刪除好友按鈕和攝像頭按鈕,當然好友必須有攝像頭才會顯示攝像頭按鈕。 有兩種方式添加聯(lián)系人: 〔1〕在右上解的查找IP輸入框里輸入IP,然后單擊下面的添加按鈕。也可以從IP輸入框里選擇以前加過的好友IP。程序允許保存10個最近聯(lián)系人的IP,當新添加聯(lián)系人時,如果已保存了10個聯(lián)系人的IP,程序會按照時間的先后順序覆蓋之前的IP。在列表框展開下拉列表后,可以按DELETE鍵刪除選定的IP。 〔2〕選定一個自己的IP,然后單擊“網(wǎng)段〞按鈕。此功能可以向選

61、定IP的IP段發(fā)送添加請求的消息,這相當于批量添加好友的功能。 在主界面任何地點單擊左鍵不放開,可以拖動程序;單擊右鍵,會彈出菜單,用戶選中相應(yīng)的菜單項,可以執(zhí)行相應(yīng)的功能;在任何地點雙擊左鍵,可以打開“個人設(shè)置〞對話框,如圖4-2所示。 圖4-2 設(shè)置對話框 最后一項“允許別人直接將我加為聯(lián)系〞的意思是別人添加我為好友時,不會彈出請求對話框而直接加為好友。 單擊保存后,此對話框里的內(nèi)容會保存到config.ini配置文件中。運行程序后,會從config.ini讀取用戶信息,并在主界面中作相應(yīng)的設(shè)置。 在主界面,添加、聊天室、傳送文件和白板按鈕都是自繪按鈕,可以顯示圖片,有提示能

62、力,當鼠標移動到其上一會兒后,會彈出提示框,而且這些按鈕都具有XP風格,既鼠標滑過時會顯示不同的狀態(tài)。用戶列表框也是自繪的,普通的列表控件無法顯示我們所需的信息。自繪按鈕和自繪列表框會作為一個單獨的模塊來介紹,這兒就不作過多的介紹。 4.2.6 自繪按鈕 VC++6.0自帶的按鈕控件不具有XP風格,而且也不能顯示圖像,作為一款好的軟件,應(yīng)該有個好的界面。在程序的主界面上,主要的按鈕都采用了自繪按鈕,而不使用自帶的按鈕控件。 AdvButton.h和AdvButton.cpp是自繪按鈕類的頭文件和實現(xiàn)文件。 在自繪按鈕類中定義了如下成員變量: intm_nState;/// 按鈕的狀態(tài)

63、 CBitmapm_bmpNormal;/// 正常圖標 CBitmapm_bmpHover;/// 焦點圖標 CBitmapm_bmpDown;/// 按如下圖標 CBitmapm_bmpDisable;/// 無效圖標 CToolTipCtrlm_pToolTipCtrl;/// 提示類 m_nState表示當前按鈕的狀態(tài),可以為宏:NORMAL,HOVER,DOWN,DISABLE,分別表示按鈕正常狀態(tài)、處于焦點狀態(tài)、按下狀態(tài)、無效狀態(tài),這4個宏的定義在實現(xiàn)文件。4個CBitmap的變量分別存儲4種狀態(tài)下的圖像。m_pToolTipCtrl是提示工具控件類,既是鼠標在其上時,

64、會彈出提示窗口。 要實現(xiàn)按鈕自繪,必須更新按鈕的風格為自繪,可以在按鈕的屬性中更改,也可以使用代碼更改。重載PreSubclassWindow(),在這個函數(shù)中更改按鈕風格并初始化m_pToolTipCtrl。 void CAdvButton::PreSubclassWindow() { ModifyStyle( 0, BS_OWNERDRAW ); CButton::PreSubclassWindow(); m_pToolTipCtrl.Create( this, TTS_ALWAYSTIP ); m_pToolTipCtrl.SetDelayTime( 100 ); CS

65、tring 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( &

66、tme ); 以上代碼告訴系統(tǒng),當鼠標離開m_hWnd窗口時,向這個窗口發(fā)送一條WM_MOUSELEAVE消息。下面的處理方式與熱鍵和托盤通知消息的處理方式一樣,自定義這個消息處理函數(shù)就行了。 自繪按鈕必須重載DrawItem()函數(shù),在DrawItem()函數(shù)中根據(jù)m_nState的值可以貼上不同的圖,表示按鈕的一不同狀態(tài)。 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; } }

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!