vc++課程設計--聊天室程序設計_第1頁
已閱讀1頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  課程名稱: VC++課程設計 </p><p>  設計題目: 聊天室程序設計 </p><p>  院 系: 計算機科學與技術系 </p>

2、<p>  班 級: </p><p>  設 計 者: </p><p>  學 號: </p><p>  指導教師: </p><p>  設計時間: 2011.8.

3、25-----2011.9.7 </p><p>  《VC++課程設計》驗收及成績評定表(項目組)</p><p><b>  課程設計任務書</b></p><p>  VC++課程設計報告</p><p><b>  軟硬件運行環(huán)境:</b></p&

4、gt;<p>  Intel® Pentium® 2及以上處理器,32M以上內存,4G以上硬盤</p><p>  Microsoft® Windows? XP操作系統(tǒng)及以上版本</p><p>  800*600或以上的屏幕分辨率</p><p><b>  開發(fā)環(huán)境:</b></p>

5、<p>  Intel® CORE i5® 2.8 GHz,2內存,320G硬盤</p><p>  Microsoft® Windows? XP Professional</p><p>  Microsoft® Visual C++ 6.0</p><p><b>  問題及難點所在</b>

6、;</p><p><b>  要解決的問題:</b></p><p>  如何與服務器端建立連接,如何接收服務器端發(fā)給客戶端的消息,相應的處理這些消息。還有就是如何提取出服務器端發(fā)給客戶端的所有的客戶昵稱,然后更新客戶端的用戶列表。最后是一些按鈕的響應函數(shù)的編寫。</p><p><b>  涉及算法的思想</b><

7、;/p><p>  首先應該明白,Windows窗口應用程序是基于消息驅動的,這應該是貫穿整個過程的基本思想。</p><p>  其次跟據(jù)MFC程序的體系結構,和大體框架,清楚自己寫的代碼應該加在哪些地方。實際編程中善于將控件窗口與一個變量相聯(lián)系,可以很大的簡化操作。特別要提到的是程序中更新用戶列表的方法,與服務器端的算法剛好相反,充分利用FOR循環(huán)并用IF判斷語句來提取信息。</p&

8、gt;<p><b>  系統(tǒng)的流程圖</b></p><p>  注:這個流程圖是在另一個文檔中畫的,完成后復制過來發(fā)現(xiàn)尺寸不是很好,顯示得很難看,所以采用了截圖的方法,清晰度不是很高,望老師體諒。</p><p><b>  系統(tǒng)的設計與分析</b></p><p><b>  第一個函數(shù):&l

9、t;/b></p><p>  void CLoginDlg::OnOK() //登陸窗口的登陸按鈕響應函數(shù)。</p><p><b>  {</b></p><p>  UpdateData();//用來刷新數(shù)據(jù)的,如果參數(shù)為真,則刷新控件的值到對應的變量,若為假,則方向相反。</p><p>  //m_pS

10、ocket->m_strName = this->m_strName;</p><p>  if(!m_pSocket->Create())//創(chuàng)建。</p><p><b>  {</b></p><p>  AfxMessageBox("網絡創(chuàng)建錯誤!??!");</p><p>

11、  m_pSocket->Close();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(!m_pSocket->Connect(m_strServer,9999))//連接,參數(shù)分別為服務器IP和端口號。</p><p

12、><b>  {</b></p><p>  AfxMessageBox("連接服務器失敗?。?!");</p><p>  m_pSocket->Close();</p><p><b>  return;</b></p><p><b>  }</

13、b></p><p>  Header head;</p><p>  head.type = LOGIN_IO;</p><p>  head.len = m_strName.GetLength();</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//向服

14、務器端發(fā)送預備消息,告知消息類型,準備好接受數(shù)據(jù)。</p><p>  m_pSocket->Send(m_strName,m_strName.GetLength());//發(fā)送該客戶端的用戶昵稱。</p><p>  theApp.m_strName = m_strName;//如果不加此行,用戶的昵稱將無法顯示到聊天窗口</p><p>  CDialog

15、::OnOK();//調用基類的ONOK函數(shù),MFC自動調用的。</p><p><b>  }</b></p><p><b>  第二個函數(shù):</b></p><p>  void CClientSocket::OnReceive(int nErrorCode) //處理服務器端發(fā)送的消息</p><

16、;p><b>  {</b></p><p>  char buff[sizeof(Header)];</p><p>  memset(buff,0,sizeof(buff));</p><p>  Receive(buff,sizeof(buff));</p><p>  Header *header = (H

17、eader*)buff;//這里需要一個類型的轉換。</p><p>  int length = header->len;</p><p>  char type = header->type;</p><p>  if(type == SEND_MESSAGE)</p><p><b>  {</b>&l

18、t;/p><p>  chatDlg->GetMessage();//定義一個CMyChatDlg *類型的chatDlg變量作用就在此體現(xiàn)。</p><p><b>  }</b></p><p>  if(type == LOGIN_IO)//收到服務器告知的更新用戶的消息。</p><p><b>  

19、{</b></p><p>  chatDlg->UpdateUser();//調用CMyChatDlg類中的UpdateUser方法。</p><p><b>  }</b></p><p>  CSocket::OnReceive(nErrorCode);</p><p><b>  

20、}</b></p><p><b>  第三個函數(shù):</b></p><p>  void CMyChatDlg::UpdateUser()//更新用戶列表。</p><p><b>  {</b></p><p>  char buff[1000];</p><p&

21、gt;  memset(buff,0,sizeof(buff));</p><p>  m_pSocket->Receive(buff, sizeof(buff),0);</p><p>  CString user_info = buff;</p><p>  CString array[100];//存放用戶名稱</p><p>

22、  int b = 0;</p><p>  for( int i=0; i<user_info.GetLength(); i++ )//拆分服務器端發(fā)來的用戶名稱,并用ARRAY數(shù)組來存儲。</p><p><b>  {</b></p><p>  if(i != (user_info.GetLength() - 1))//判斷是否已

23、經到達UER_INFO的尾端。</p><p><b>  {</b></p><p>  if ( user_info[i]=='&' )//判斷是否已經到一個昵稱的結尾。</p><p><b>  {</b></p><p>  b ++;//用戶加一</p>

24、;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  array[b] = array[b] + user_info[i];//將一個用戶名稱拷貝到一個數(shù)組單元中。</p><p&g

25、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  m_num.Format("%d", b+1);//將INT類型的b轉換為CString類型。</p><p>  UpdateD

26、ata(FALSE);//變量到控件。</p><p>  m_UserList.ResetContent();//置空列表框。</p><p>  for(int j=0; j<b+1; j++)</p><p><b>  {</b></p><p>  m_UserList.AddString(array[j

27、]);//將轉換好的用戶名稱依次顯示出來。</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  第四個函數(shù):</b></p><p>  void CMyChatDlg::OnSend() //響應發(fā)送按鈕的函數(shù)。<

28、/p><p><b>  {</b></p><p>  UpdateData();//控件的值—>變量</p><p>  if(m_strMessage == "")</p><p><b>  {</b></p><p>  AfxMessageB

29、ox("不能發(fā)送空消息?。?!");</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);//得到該控件類型的對象地址。</p><p>  pEdit->SetFocus();//調用成員函數(shù)設置焦點。</p><p><b>  return;</b&

30、gt;</p><p><b>  }</b></p><p>  Header head;</p><p>  head.type = SEND_MESSAGE;</p><p>  head.len = m_strMessage.GetLength();</p><p>  CTime tim

31、e = CTime::GetCurrentTime();//得到系統(tǒng)當前時間。</p><p>  CString t = time.Format("%H:%M:%S");//設置時間格式。</p><p>  CString nikeName = theApp.m_strName;</p><p>  CString str =nikeName

32、+ " " + t + "\r\n" +m_strMessage;//把要發(fā)送的信息都存儲在這str變量中。</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//發(fā)送“頭信息”。</p><p>  // TODO: Add your control notifi

33、cation handler code here</p><p>  if(m_pSocket->Send((LPCTSTR)str, str.GetLength()))//發(fā)送用戶編輯的信息,并判斷Send函數(shù)的返回值。</p><p><b>  {</b></p><p>  m_strMessage = "";

34、</p><p>  UpdateData(FALSE);//變量—>控件的值</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);</p><p>  pEdit->SetFocus();</p><p><b>  }</b><

35、/p><p><b>  else</b></p><p><b>  {</b></p><p>  AfxMessageBox("網絡傳輸錯誤!");</p><p><b>  }</b></p><p><b>  }&

36、lt;/b></p><p><b>  第五個函數(shù):</b></p><p>  BOOL CMyChatDlg::GetMessage()//由CClientSocket對象中的OnReceive方法調用。</p><p><b>  {</b></p><p>  char buff[1

37、000];//定義一個數(shù)組來接受消息。</p><p>  memset(buff,0,sizeof(buff));//將數(shù)組全部初始化為0。</p><p>  m_pSocket->Receive(buff, sizeof(buff),0);//接受消息。</p><p>  CString strTemp = buff;</p><

38、p>  strTemp += _T("\r\n");</p><p>  m_MessageList.ReplaceSel(strTemp);//用strTemp變量中的內容替換消息顯示框控件的當前區(qū)域。</p><p>  return TRUE;</p><p><b>  }</b></p><

39、;p>  運行結果與分析(測試)</p><p><b>  打開服務器并初始化</b></p><p><b>  一個用戶登陸服務器</b></p><p>  客戶端發(fā)送了一條消息</p><p><b>  第二個用戶登陸</b></p><p

40、><b>  兩個用戶之間聊天</b></p><p>  昵稱為唐毅的用戶離開聊天室</p><p>  昵稱為煙灰缸的用戶離開聊天室</p><p><b>  總結(收獲與體會)</b></p><p><b>  附:源代碼</b></p><

41、p>  注:以下代碼包括了一點VC自動幫我們生成的部分。</p><p><b>  客戶端源代碼:</b></p><p>  CMyChatApp類中的InitInstance方法:</p><p>  BOOL CMyChatApp::InitInstance()//初始化實例。</p><p><b&

42、gt;  {</b></p><p>  if (!AfxSocketInit())//初始化WINSOCK環(huán)境,一旦選擇支持WINSOCKET類則由MFC為我們自動生成。</p><p><b>  {</b></p><p>  AfxMessageBox(IDP_SOCKETS_INIT_FAILED);</p>

43、<p>  return FALSE;</p><p><b>  }</b></p><p>  AfxEnableControlContainer();</p><p>  // Standard initialization</p><p>  // If you are not using these

44、 features and wish to reduce the size</p><p>  // of your final executable, you should remove from the following</p><p>  // the specific initialization routines you do not need.</p>&l

45、t;p>  #ifdef _AFXDLL</p><p>  Enable3dControls();// Call this when using MFC in a shared DLL</p><p><b>  #else</b></p><p>  Enable3dControlsStatic();// Call this

46、when linking to MFC statically</p><p><b>  #endif</b></p><p>  CClientSocket *clientSocket;</p><p>  clientSocket = new CClientSocket();//NEW一個CClientSocket對象,用來之后與服務器端建

47、立連接。</p><p>  CLoginDlg* loginDlg;</p><p>  loginDlg = new CLoginDlg(clientSocket);//NEW一個CLoginDlg對象。</p><p>  if(loginDlg->DoModal() == IDCANCEL)//顯示這個登陸窗口,并判斷返回值是否來IDCANCEL,如是

48、</p><p><b>  {</b></p><p>  delete clientSocket;</p><p>  delete loginDlg;//則delete這兩個對象。</p><p>  return false;//返回false后程序結束。</p><p><b

49、>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  delete loginDlg;//如果用戶點擊的是登陸按鈕,則會調用對應的消息處理函數(shù),并delete這個登陸窗口對象。</p><p><b>

50、  }</b></p><p>  CMyChatDlg *dlg;</p><p>  dlg = new CMyChatDlg(clientSocket);</p><p>  m_pMainWnd = dlg;//m_pMainWnd是CWinThread(是CMyApp的基類)的一個成員變量,用于儲存一個指向我們創(chuàng)建的一個線程的主窗口的對象。&l

51、t;/p><p>  int nResponse = dlg->DoModal();//顯示客戶端主窗口,并接受函數(shù)的返回值。</p><p>  return FALSE;</p><p><b>  }</b></p><p>  在CMyChatApp類中的成員變量:</p><p>  

52、CString m_strName;</p><p><b>  定義了一個結構體:</b></p><p>  typedef struct tagHeader</p><p><b>  {</b></p><p>  chartype;</p><p>  int

53、len; </p><p>  } Header, *pHeader;</p><p>  #define LOGIN_IO1</p><p>  #define SEND_MESSAGE3</p><p>  客戶端套接字類中的OnReceive成員函數(shù):</p><p>  void CClientSo

54、cket::OnReceive(int nErrorCode) </p><p><b>  {</b></p><p>  // TODO: Add your specialized code here and/or call the base class</p><p>  char buff[sizeof(Header)];</p&

55、gt;<p>  memset(buff,0,sizeof(buff));</p><p>  Receive(buff,sizeof(buff));</p><p>  Header *header = (Header*)buff;//這里需要一個類型的轉換。</p><p>  int length = header->len;</p&

56、gt;<p>  char type = header->type;</p><p>  if(type == SEND_MESSAGE)</p><p><b>  {</b></p><p>  chatDlg->GetMessage();//定義一個CMyChatDlg *類型的chatDlg變量作用就在此體現(xiàn)。

57、</p><p><b>  }</b></p><p>  if(type == LOGIN_IO)//收到服務器告知的更新用戶的消息。</p><p><b>  {</b></p><p>  chatDlg->UpdateUser();//調用CMyChatDlg類中的UpdateU

58、ser方法。</p><p><b>  }</b></p><p>  CSocket::OnReceive(nErrorCode);</p><p><b>  }</b></p><p>  在這個類中還定義了兩個公有的成員變量:</p><p>  CMyChatD

59、lg *chatDlg;//用來調用主窗口中的GetMessage和UpdateUser方法。</p><p>  CString m_strName;//存放該客戶端的昵稱。</p><p>  登陸窗口類的構造函數(shù):</p><p>  CLoginDlg::CLoginDlg(CClientSocket *p_Socket, CWnd* pParent /*=

60、NULL*/)//創(chuàng)建它的對象的時候需要傳遞它一個CClientSocket對象</p><p>  : CDialog(CLoginDlg::IDD, pParent)//的地址,用來建立連接。</p><p><b>  {</b></p><p>  ASSERT(p_Socket);//斷言assert是一個宏,一般可以用在判斷某件操作

61、是否成功上。</p><p>  m_pSocket = p_Socket;//提取傳遞進來的參數(shù)。</p><p>  //{{AFX_DATA_INIT(CLoginDlg)</p><p>  m_strName = _T("");</p><p>  m_strServer = _T("127.0.0.1

62、");//_T是一個宏,這里的作用相當于初始化了這兩個控件的值。</p><p>  //}}AFX_DATA_INIT</p><p><b>  }</b></p><p>  登陸窗口的確定按鈕響應函數(shù):</p><p>  void CLoginDlg::OnOK() </p><p

63、><b>  {</b></p><p>  // TODO: Add extra validation here</p><p>  UpdateData();//用來刷新數(shù)據(jù)的,如果參數(shù)為真,則刷新控件的值到對應的變量,若為假,則方向相反。</p><p>  //m_pSocket->m_strName = this->

64、;m_strName;</p><p>  if(!m_pSocket->Create())//創(chuàng)建。</p><p><b>  {</b></p><p>  AfxMessageBox("網絡創(chuàng)建錯誤?。?!");</p><p>  m_pSocket->Close();</p

65、><p><b>  return;</b></p><p><b>  }</b></p><p>  if(!m_pSocket->Connect(m_strServer,9999))//連接,參數(shù)分別為服務器IP和端口號。</p><p><b>  {</b><

66、/p><p>  AfxMessageBox("連接服務器失敗?。?!");</p><p>  m_pSocket->Close();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  He

67、ader head;</p><p>  head.type = LOGIN_IO;</p><p>  head.len = m_strName.GetLength();</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//向服務器端發(fā)送預備消息,告知消息類型,準備好接受數(shù)據(jù)。</

68、p><p>  m_pSocket->Send(m_strName,m_strName.GetLength());//發(fā)送該客戶端的用戶昵稱。</p><p>  theApp.m_strName = m_strName;//如果不加此行,用戶的昵稱將無法顯示到聊天窗口</p><p>  CDialog::OnOK();//調用基類的ONOK函數(shù),MFC自動調用

69、的。</p><p><b>  }</b></p><p>  登陸窗口類中的成員變量有:</p><p>  CClientSocket *m_pSocket;</p><p>  CStringm_strName;</p><p>  CStringm_strServer;</p&

70、gt;<p>  重載了一個CMyChatDlg類的構造函數(shù):</p><p>  CMyChatDlg::CMyChatDlg(CClientSocket *p_Socket,CWnd* pParent /*=NULL*/)//需要傳遞已經和服務器建立連接的CClientSocket對象</p><p>  : CDialog(CMyChatDlg::IDD, pParen

71、t)//CClientSocket始終是一個主線,整個流程都要用到它,因此必需傳遞它。</p><p><b>  {</b></p><p>  m_pSocket = p_Socket;//提取傳遞的參數(shù)。</p><p>  m_pSocket->chatDlg = this;//將本窗口的對象地址賦值給m_pSocket中的成員變

72、量chatDlg。</p><p>  //{{AFX_DATA_INIT(CMyChatDlg)</p><p>  m_strMessage = _T("");//初始化控件值。</p><p>  m_num = _T("");</p><p>  //}}AFX_DATA_INIT</p&

73、gt;<p>  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32</p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//讀取圖標。</p><p><b>  }</b></p>

74、;<p>  DoDataExchange函數(shù),完成了控件與變量的關聯(lián)(前幾個類中也有該函數(shù)):</p><p>  void CMyChatDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(p

75、DX);</p><p>  //{{AFX_DATA_MAP(CMyChatDlg)</p><p>  DDX_Control(pDX, IDC_LIST_USER, m_UserList);</p><p>  DDX_Control(pDX, IDC_EDIT_LIST, m_MessageList);</p><p>  DDX_T

76、ext(pDX, IDC_EDIT_MESSAGE, m_strMessage);</p><p>  DDX_Text(pDX, IDC_STATIC_NUM, m_num);</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p><b>  消息映射宏

77、:</b></p><p>  EGIN_MESSAGE_MAP(CMyChatDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CMyChatDlg)</p><p>  ON_WM_SYSCOMMAND()</p><p>  ON_WM_PAINT()</p><p> 

78、 ON_WM_QUERYDRAGICON()</p><p>  ON_BN_CLICKED(ID_SEND, OnSend)</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  CMyChatDlg類中的OnSend方法:</p><p> 

79、 void CMyChatDlg::OnSend() //響應發(fā)送按鈕的函數(shù)。</p><p><b>  {</b></p><p>  UpdateData();//控件的值—>變量</p><p>  if(m_strMessage == "")</p><p><b>  {&

80、lt;/b></p><p>  AfxMessageBox("不能發(fā)送空消息?。?!");</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);//得到該控件類型的對象地址。</p><p>  pEdit->SetFocus();//調用成員函數(shù)設置焦點。<

81、;/p><p><b>  return;</b></p><p><b>  }</b></p><p>  Header head;</p><p>  head.type = SEND_MESSAGE;</p><p>  head.len = m_strMessage.G

82、etLength();</p><p>  CTime time = CTime::GetCurrentTime();//得到系統(tǒng)當前時間。</p><p>  CString t = time.Format("%H:%M:%S");//設置時間格式。</p><p>  CString nikeName = theApp.m_strName;&

83、lt;/p><p>  CString str =nikeName+ " " + t + "\r\n" +m_strMessage;//把要發(fā)送的信息都存儲在這str變量中。</p><p>  m_pSocket->Send((char *)&head,sizeof(Header));//發(fā)送“頭信息”。</p>

84、<p>  // TODO: Add your control notification handler code here</p><p>  if(m_pSocket->Send((LPCTSTR)str, str.GetLength()))//發(fā)送用戶編輯的信息,并判斷Send函數(shù)的返回值。</p><p><b>  {</b></p&g

85、t;<p>  m_strMessage = "";</p><p>  UpdateData(FALSE);//變量—>控件的值</p><p>  CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);</p><p>  pEdit->SetFocus();<

86、/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  AfxMessageBox("網絡傳輸錯誤!");</p><p><b>  }&

87、lt;/b></p><p><b>  }</b></p><p>  CMyChatDlg類中的OnCancel方法:</p><p>  void CMyChatDlg::OnCancel()//響應退出鍵。 </p><p><b>  {</b></p><p&g

88、t;  // TODO: Add extra cleanup here</p><p>  if(m_pSocket)</p><p><b>  {</b></p><p>  m_pSocket->Close();//關閉連接。</p><p>  delete m_pSocket;</p>&l

89、t;p><b>  }</b></p><p>  CDialog::OnCancel();</p><p><b>  }</b></p><p>  CMyChatDlg類中的GetMessage方法:</p><p>  BOOL CMyChatDlg::GetMessage()//由C

90、ClientSocket對象中的OnReceive方法調用。</p><p><b>  {</b></p><p>  char buff[1000];//定義一個數(shù)組來接受消息。</p><p>  memset(buff,0,sizeof(buff));//將數(shù)組全部初始化為0。</p><p>  m_pSock

91、et->Receive(buff, sizeof(buff),0);//接受消息。</p><p>  CString strTemp = buff;</p><p>  strTemp += _T("\r\n");</p><p>  m_MessageList.ReplaceSel(strTemp);//用strTemp變量中的內容替

92、換消息顯示框控件的當前區(qū)域。</p><p>  return TRUE;</p><p><b>  }</b></p><p>  CMyChatDlg類中的UpdateUser方法:</p><p>  oid CMyChatDlg::UpdateUser()</p><p><b&g

93、t;  {</b></p><p>  char buff[1000];</p><p>  memset(buff,0,sizeof(buff));</p><p>  m_pSocket->Receive(buff, sizeof(buff),0);</p><p>  CString user_info = buff

94、;</p><p>  CString array[100];//存放用戶名稱</p><p>  int b = 0;</p><p>  for( int i=0; i<user_info.GetLength(); i++ )//拆分服務器端發(fā)來的用戶名稱,并用ARRAY數(shù)組來存儲。</p><p><b>  {<

95、/b></p><p>  if(i != (user_info.GetLength() - 1))//判斷是否已經到達UER_INFO的尾端。</p><p><b>  {</b></p><p>  if ( user_info[i]=='&' )//判斷是否已經到一個昵稱的結尾。</p>&l

96、t;p><b>  {</b></p><p>  b ++;//用戶加一</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  ar

97、ray[b] = array[b] + user_info[i];//將一個用戶名稱拷貝到一個數(shù)組單元中。</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  m_num.Format(&q

98、uot;%d", b+1);//將INT類型的b轉換為CString類型。</p><p>  UpdateData(FALSE);//變量到控件。</p><p>  m_UserList.ResetContent();//置空列表框。</p><p>  for(int j=0; j<b+1; j++)</p><p>&

99、lt;b>  {</b></p><p>  m_UserList.AddString(array[j]);//將轉換好的用戶名稱依次顯示出來。</p><p><b>  }</b></p><p><b>  }</b></p><p>  以上就是客戶端的源代碼。</p

溫馨提示

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

評論

0/150

提交評論