freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于vc的企業(yè)內(nèi)部通信軟件的設(shè)計與實現(xiàn)計算機優(yōu)秀畢業(yè)論文(文件)

2025-07-15 18:49 上一頁面

下一頁面
 

【正文】 信技術(shù),而WINDOWS有完善成熟的網(wǎng)絡(luò)通信接口,以及與VC++,加之相類似的更大規(guī)模的INTERNET通信工具產(chǎn)品也已有例在先,所以這個程序的開發(fā)可行性在技術(shù)上是完全可行的。第二,介紹本軟件的詳細(xì)設(shè)計。總體功能傳輸文件白板聊天室發(fā)送基本聊天信息保持連接發(fā)送圖片信息發(fā)送文本信息圖41 總體功能框圖本軟件的總體功能主要劃分為五個模塊:(1) 基本聊天模塊:兩個用戶端的基本聊天信息發(fā)送,這些基本聊天信息包括文本和圖片。(3) 白板模塊:多個用戶端之間的白板信息傳送。本文件傳輸功能用可以支持?jǐn)帱c續(xù)傳文件。這樣處理還有一個好處,如果需要修改某些宏的值,而不用到處去找宏的定義,方便和快捷。 /// 信息public: CDebug()。期中構(gòu)造和析構(gòu)函數(shù)如下:CDebug::CDebug( CString strMessage ){ m_strMessage = strMessage。}CDebug::~CDebug(){ CString strTrace。}在函數(shù)或語句組的開始處定義一個CDebug變量,當(dāng)程序運行到變量定義處的時候,會打印出run in : test,當(dāng)程序執(zhí)行完函數(shù)或語句組時,會打印出run out : test,這樣我們就可以知道程序運行到何處,極大的方便了我們對程序的調(diào)試。下面從各個方面來說明本設(shè)計的處理方式:(1)不在任務(wù)欄顯示圖標(biāo)CDialog dlgParent。dlgParent )。上面代碼就達(dá)到了使程序主界面不在任務(wù)欄中顯示的目的。wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE )。熱鍵的功能可以隱藏、顯示主界面,有消息到達(dá)時,按熱鍵也可以打開聊天對話框。BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog) … ON_MESSAGE( WM_HOTKEY, OnHotkey ) … //}}AFX_MSG_MAPEND_MESSAGE_MAP()在消息映射中,我們用OnHotkey()函數(shù)來處理WM_HOTKEY消息。 }}在OnHotkey()函數(shù)中判斷主界面是否是可見的,如果是可見的那么隱藏起來,否則顯示,并且把主界面設(shè)為前景窗口。 }}void CInstantMessagingDlg::OnCancel() { if( IDOK == MessageBox( 要退出嗎?, 退出, MB_OKCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON2 ) ) { … DestroyWindow()。HICON hIcon = AfxGetApp()LoadIcon( STATE_ONLINE )。 = WM_SHELLNOTIFY。Shell_NotifyIcon( NIM_ADD, amp。void OnShellNotifyProc( WPARAM wParam, LPARAM lParam )。m_nid )。只允許運行一個實例,有多種方法,本設(shè)計采用的是創(chuàng)建命名事件的方法:HANDLE hEvent = ::CreateEvent( NULL, FALSE, FALSE, InstantMessaging )。 主界面布局程序主界面如圖41所示。也可以從IP輸入框里選擇以前加過的好友IP。此功能可以向選定IP的IP段發(fā)送添加請求的消息,這相當(dāng)于批量添加好友的功能。運行程序后,并在主界面中作相應(yīng)的設(shè)置?!∽岳L按鈕VC++,而且也不能顯示圖像,作為一款好的軟件,應(yīng)該有個好的界面。 /// 按鈕的狀態(tài)CBitmap m_bmpNormal。 /// 無效圖標(biāo)CToolTipCtrl m_pToolTipCtrl。要實現(xiàn)按鈕自繪,必須更新按鈕的風(fēng)格為自繪,可以在按鈕的屬性中更改,也可以使用代碼更改。 ( this, TTS_ALWAYSTIP )。 ( this, strText )。 = m_hWnd。以上代碼告訴系統(tǒng),當(dāng)鼠標(biāo)離開m_hWnd窗口時,向這個窗口發(fā)送一條WM_MOUSELEAVE消息。 ODS_DISABLED ) { m_nState = DISABLE。 break。 break。要使按鈕無效,必須調(diào)用EnableWindow( FALSE )函數(shù)來更改按鈕的狀態(tài),我們也就無法更改m_nState的值。要使用此函數(shù),必須導(dǎo)入 ,在程序使用如下語句導(dǎo)入:pragma ment( lib, C:\\Program Files\\Microsoft Visual Studio\\VC98\\Lib\\  ) 自繪好友列表框普通的列表控件無法滿足程序的要求,程序要求好友列表框可以顯示好友的頭像、好友昵稱、好友IP和刪除、攝像頭按鈕。 /// 頭像圖像列表int m_nCamera。 … CListCtrl::PreSubclassWindow()。在向好友列表框中添加好友時,主對話框調(diào)用好友列表框的AddUser()函數(shù),參數(shù)為USER結(jié)構(gòu)體,這個參數(shù)作為列表項的額外數(shù)據(jù),這樣重繪的時候再讀取出這個額外數(shù)據(jù)就可以得到這一項的用戶信息。在DrawItem()函數(shù)中,先得到額外的附加數(shù)據(jù),既是添加項時作為參數(shù)傳遞的USER類型的變量,然后再根據(jù)m_nCurSel、m_nDelIcon和m_nCamera的值自繪?!√砑雍糜?,這一節(jié)介紹的是具體的實現(xiàn)。在添加按鈕的響應(yīng)函數(shù)中先判斷IP地址是否合法,是否是自己的IP,是否已經(jīng)添加此好友。 = m_bCamera。/// 分配空間UINT uDataLength = sizeof( DATAPACKET ) + sizeof( USER )。memcpy( pSendData + sizeof( DATAPACKET ), amp。在AddRequest()函數(shù)中,先進行相應(yīng)的判斷,如果具備加為好友的條件,根據(jù)是否允許直接加為好友的值是否彈出提示對話框。添加好友對方是否允許將好友添加到數(shù)組和列表框中彈出提示框TF圖43 添加好友流程圖好友收到請求的流程圖,如圖44所示?!∨c好友保持連接此功能用到了定時器,間隔一定時間向所有好友發(fā)起請求保持連接的消息,并把發(fā)送過此消息的好友添加到一個臨時好友列表中。在程序初始化時設(shè)置一定時器:SetTimer( TIMER_CONNECT, DEFAULT_REFRESH_TIME, NULL )。 if( ( ) ) { ( nIndex )。 /// 分別發(fā)送保持連接的消息,將發(fā)送過的IP加入到m_strlstKeepConnent for( nIndex = 0。 = REQUEST_KEEPCONNECT。dataPacket, sizeof( DATAPACKET ) )。 }} 聊天模塊聊天模塊提供的是兩個已連接好友之間的聊天服務(wù),其聊天內(nèi)容既可以是文字聊天也可以是圖片聊天。if( RegOpenKeyEx( HKEY_CLASSES_ROOT, \\CLSID, 0, KEY_READ, amp。 lpDllEntryPoint = GetProcAddress( hLib, DllRegisterServer )。聊天對話框中定的發(fā)送和接收富文本框變量為:CRichText m_rtReceived。 … CString strSend = ()。接收到的消息主要代碼如下:void CChatDlg::ReceiveMessage( LPCSTR szTime, LPCSTR szMessage ){ CString strText。 ( szMessage )。聊天消息包括文字格式和圖像信息,因此發(fā)送的數(shù)據(jù)可能很大,會超過Socket發(fā)送的最大數(shù)據(jù)長度,這樣如果直接發(fā)送,會因為數(shù)據(jù)長度過大,而導(dǎo)致發(fā)送失敗。if (!AfxSocketInit( amp。主對話框定義了一變量,在用UDP發(fā)送數(shù)據(jù)的時候,就可以根據(jù)這個值的大小來確定分包的大小。消息發(fā)送者收到請求發(fā)送消息的消息后,會把相應(yīng)的數(shù)據(jù)包發(fā)送給聊天對方。聊天對話框還有記錄和打開聊天記錄的功能。聊天室分為服務(wù)器和客戶端,每個用戶只能創(chuàng)建一個聊天室,也只能加入一個聊天室。用戶創(chuàng)建聊天室可以把自己的所有好友都加入到聊天室,這些好友發(fā)的消息可以被所有在聊天室中的好友共享,即使這些好友之間可能并不能互相訪問。在未進入聊天室好友列表中選定要添加進入聊天室的好友,單擊向上的按鈕,會向這些選定好的好友發(fā)送加入聊天室的請求。如果好友接受了請求,接受請求的好友就會從未進入聊天室聊表框移到聊天室好友列表框。 nIndex ()。當(dāng)創(chuàng)建聊天室的用戶發(fā)送聊天消息時,服務(wù)器將文本消息發(fā)給所有聊天室好友。 nIndex++ ){ USER user = ( nIndex )。 nIndex1++ ){ USER userSend = ( nIndex1 )??蛻舳说奶幚肀确?wù)器要簡單一些,客戶端只有在聊天室列表中的好友,客戶端也只向服務(wù)器發(fā)送消息,不用向其他聊天室好友發(fā)送消息。當(dāng)服務(wù)器踢出客戶端,或服務(wù)器關(guān)閉時,彈出對話框提示用戶,并清空聊天室好友,設(shè)置發(fā)送文本框不可用。以上就是聊天室的設(shè)計方法。文件傳送模塊用到了多線程,可以實現(xiàn)多個文件、多個用戶之間的傳輸。下面詳細(xì)介紹服務(wù)器端的工作過程:傳送文件用到的是TCP連接,因為傳送文件必須保證傳輸?shù)臄?shù)據(jù)不能丟失也不能有誤。如果接收者接收文件,接收者會先向pSFServerSocket發(fā)起連接,程序重載pSFServerSocket的OnAccept()函數(shù),在此函數(shù)中調(diào)用傳輸文件服務(wù)器對話框的OnAccept()函數(shù):void CSendFilesServerDlg::OnAccept(){ CSendFilesSocket sfSocket。 pSFSThreadAttachSocket( () )。然后此函數(shù)再創(chuàng)建了一個線程,并把此線程加入到線程列表中。在傳輸文件對話框中設(shè)置了一個定時器,用于刷新列表框。因為程序支持?jǐn)帱c續(xù)傳,因此接收者首先會通知CSendFilesServerThread線程要發(fā)送的文件、大小、已經(jīng)發(fā)送的大小,之后線程會打開需傳送的文件,并定位到已。如果接受者停止了接收文件或者文件傳輸完成,相應(yīng)的線程也會調(diào)用RefreshListBox()函數(shù)及時的刷新列表框。發(fā)送數(shù)據(jù)的功能就由這個線程來處理了。 ( pSFSThread )。 CSendFilesServerThread *pSFSThread = ( CSendFilesServerThread * )AfxBeginThread( RUNTIME_CLASS( CSendFilesServerThread ), 0, 0, CREATE_SUSPENDED, NULL )。當(dāng)用戶選擇好傳送的文件和傳送的好友后,傳送信息會加入到列表框,并調(diào)用主對話框的SendFilesNotify()函數(shù)向這些好友發(fā)送傳送文件的消息,此消息中還包括文件名和文件長度。傳送文件服務(wù)器界面如圖48所示?!魉臀募K傳送文件模塊的設(shè)計目的是為了方便用戶之間的文件傳送??蛻舳税l(fā)送消息時,先將發(fā)送的消息加入到接收消息文本框,然后將消息發(fā)往服務(wù)器,由服務(wù)器將消息發(fā)到各個聊天室好友。圖47 聊天室客戶界面首先,主對話框接受到CHATROOM_ADDREQUEST消息,彈出對話框詢問用戶是否進入好友創(chuàng)建的聊天室,如果用戶拒絕加入則不用處理此消息,如果用戶同意加入聊天室,那么就彈出聊天室客戶端。 } SendTextToIP( , CHATROOM_CLIENT_PORT, strSend, )。}聊天室服務(wù)器接收到消息時,會將接收到的消息加入到聊天室接收文本框,并將消息發(fā)給所有在聊天室中的好友,除了向服務(wù)器發(fā)送消息的好友外:for( int nIndex1 = 1。因此,發(fā)送的消息長度不會超過UDP可以發(fā)送的數(shù)據(jù)最大值,發(fā)送消息時直接一次發(fā)送就行:for( int nIndex = 1。 SendUserCommandToIP( CHATROOM_SERVER_CLOSED, , CHATROOM_CLIENT_PORT, NULL )。這兒是發(fā)往CHATROOM_CLIENT_PORT端口的消息,因為將要刪除的好友已經(jīng)打開了聊天室,而且創(chuàng)建了聊天室客戶端的SOCKET,可以接收發(fā)往這個端口的消息。userSelf )。聊天室服務(wù)器和客戶端各使用一個SOCKET,創(chuàng)建的是UDP套接字,有自己的端口號。聊天室服務(wù)器如圖46所示。打開“聊天記錄”按鈕,可以選擇保存的聊天記錄,在接收文本框內(nèi)會顯示打開選擇的聊天記錄。如果沒有接收完畢,繼續(xù)請求發(fā)送下一個消息數(shù)據(jù)包。對方接收到這個通知消息時,會根據(jù)接收到的消息長度分配一個接收消息的臨時空間,并把接收到的消息時間也保存。 return FALSE。上面提到了發(fā)送的最大數(shù)據(jù)長度,m_pLisSocket是創(chuàng)建的UDP套接字,不像TCP一樣可以發(fā)送隨意大小的數(shù)據(jù),UDP套接字只能發(fā)送小于一定大小的數(shù)據(jù)。主對話框接收到聊天消息后,根據(jù)消息發(fā)送的來源IP來處理消息。 /// 設(shè)置接收框 ( ().GetLength() )。}單擊“發(fā)送”按鈕或CTRL+ENTER鍵,程序會調(diào)用OnSend()函數(shù),首先得到發(fā)送的時間和發(fā)送的內(nèi)容,得到的是RTF格式的內(nèi)容,因此st
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1