MyChatDlg.cpp
上传用户:posgewe
上传日期:2013-05-17
资源大小:69k
文件大小:6k
源码类别:

Telnet服务器

开发平台:

Visual C++

  1. // MyChatDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MyChat.h"
  5. #include "MyChatDlg.h"
  6. #include "ClientSocket.h"
  7. #include "tagHeader.h"
  8. #include "afxtempl.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CAboutDlg dialog used for App About
  16. class CAboutDlg : public CDialog
  17. {
  18. public:
  19. CAboutDlg();
  20. // Dialog Data
  21. //{{AFX_DATA(CAboutDlg)
  22. enum { IDD = IDD_ABOUTBOX };
  23. //}}AFX_DATA
  24. // ClassWizard generated virtual function overrides
  25. //{{AFX_VIRTUAL(CAboutDlg)
  26. protected:
  27. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  28. //}}AFX_VIRTUAL
  29. // Implementation
  30. protected:
  31. //{{AFX_MSG(CAboutDlg)
  32. //}}AFX_MSG
  33. DECLARE_MESSAGE_MAP()
  34. };
  35. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  36. {
  37. //{{AFX_DATA_INIT(CAboutDlg)
  38. //}}AFX_DATA_INIT
  39. }
  40. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. //{{AFX_DATA_MAP(CAboutDlg)
  44. //}}AFX_DATA_MAP
  45. }
  46. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  47. //{{AFX_MSG_MAP(CAboutDlg)
  48. // No message handlers
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CMyChatDlg dialog
  53. CMyChatDlg::CMyChatDlg(CClientSocket *p_Socket,CWnd* pParent /*=NULL*/)
  54. : CDialog(CMyChatDlg::IDD, pParent)
  55. {
  56. m_pSocket = p_Socket;
  57. m_pSocket->chatDlg = this;
  58. //{{AFX_DATA_INIT(CMyChatDlg)
  59. m_strMessage = _T("");
  60. //}}AFX_DATA_INIT
  61. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  62. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  63. }
  64. void CMyChatDlg::DoDataExchange(CDataExchange* pDX)
  65. {
  66. CDialog::DoDataExchange(pDX);
  67. //{{AFX_DATA_MAP(CMyChatDlg)
  68. DDX_Control(pDX, IDC_LIST_USER, m_UserList);
  69. DDX_Control(pDX, IDC_EDIT_LIST, m_MessageList);
  70. DDX_Text(pDX, IDC_EDIT_MESSAGE, m_strMessage);
  71. //}}AFX_DATA_MAP
  72. }
  73. BEGIN_MESSAGE_MAP(CMyChatDlg, CDialog)
  74. //{{AFX_MSG_MAP(CMyChatDlg)
  75. ON_WM_SYSCOMMAND()
  76. ON_WM_PAINT()
  77. ON_WM_QUERYDRAGICON()
  78. ON_BN_CLICKED(ID_SEND, OnSend)
  79. //}}AFX_MSG_MAP
  80. END_MESSAGE_MAP()
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CMyChatDlg message handlers
  83. BOOL CMyChatDlg::OnInitDialog()
  84. {
  85. CDialog::OnInitDialog();
  86. // Add "About..." menu item to system menu.
  87. // IDM_ABOUTBOX must be in the system command range.
  88. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  89. ASSERT(IDM_ABOUTBOX < 0xF000);
  90. CMenu* pSysMenu = GetSystemMenu(FALSE);
  91. if (pSysMenu != NULL)
  92. {
  93. CString strAboutMenu;
  94. strAboutMenu.LoadString(IDS_ABOUTBOX);
  95. if (!strAboutMenu.IsEmpty())
  96. {
  97. pSysMenu->AppendMenu(MF_SEPARATOR);
  98. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  99. }
  100. }
  101. // Set the icon for this dialog.  The framework does this automatically
  102. //  when the application's main window is not a dialog
  103. SetIcon(m_hIcon, TRUE); // Set big icon
  104. SetIcon(m_hIcon, FALSE); // Set small icon
  105. // TODO: Add extra initialization here
  106. //GetDlgItem(IDC_STATIC_NIKENAME)->SetWindowText(theApp.m_strName);
  107. return TRUE;  // return TRUE  unless you set the focus to a control
  108. }
  109. void CMyChatDlg::OnSysCommand(UINT nID, LPARAM lParam)
  110. {
  111. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  112. {
  113. CAboutDlg dlgAbout;
  114. dlgAbout.DoModal();
  115. }
  116. else
  117. {
  118. CDialog::OnSysCommand(nID, lParam);
  119. }
  120. }
  121. // If you add a minimize button to your dialog, you will need the code below
  122. //  to draw the icon.  For MFC applications using the document/view model,
  123. //  this is automatically done for you by the framework.
  124. void CMyChatDlg::OnPaint() 
  125. {
  126. if (IsIconic())
  127. {
  128. CPaintDC dc(this); // device context for painting
  129. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  130. // Center icon in client rectangle
  131. int cxIcon = GetSystemMetrics(SM_CXICON);
  132. int cyIcon = GetSystemMetrics(SM_CYICON);
  133. CRect rect;
  134. GetClientRect(&rect);
  135. int x = (rect.Width() - cxIcon + 1) / 2;
  136. int y = (rect.Height() - cyIcon + 1) / 2;
  137. // Draw the icon
  138. dc.DrawIcon(x, y, m_hIcon);
  139. }
  140. else
  141. {
  142. CDialog::OnPaint();
  143. }
  144. }
  145. // The system calls this to obtain the cursor to display while the user drags
  146. //  the minimized window.
  147. HCURSOR CMyChatDlg::OnQueryDragIcon()
  148. {
  149. return (HCURSOR) m_hIcon;
  150. }
  151. void CMyChatDlg::OnSend() 
  152. {
  153. UpdateData();
  154. if(m_strMessage == "")
  155. {
  156. AfxMessageBox("不能发送空消息!!!");
  157. CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);
  158. pEdit->SetFocus();
  159. return;
  160. }
  161. Header head;
  162. head.type = SEND_MESSAGE;
  163. head.len = m_strMessage.GetLength();
  164. CTime time = CTime::GetCurrentTime();
  165. CString t = time.Format("%H:%M:%S");
  166. CString nikeName = theApp.m_strName;
  167. CString str = nikeName + "   " + t + "rn" + "  " +m_strMessage;
  168. m_pSocket->Send((char *)&head,sizeof(Header));
  169. // TODO: Add your control notification handler code here
  170. if(m_pSocket->Send((LPCTSTR)str, str.GetLength()))
  171. {
  172. m_strMessage = "";
  173. UpdateData(FALSE);
  174. CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE);
  175. pEdit->SetFocus();
  176. }else
  177. {
  178. AfxMessageBox("网络传输错误!");
  179. }
  180. }
  181. void CMyChatDlg::OnCancel() 
  182. {
  183. // TODO: Add extra cleanup here
  184. if(m_pSocket)
  185. {
  186. m_pSocket->Close();
  187. delete m_pSocket;
  188. }
  189. CDialog::OnCancel();
  190. }
  191. BOOL CMyChatDlg::GetMessage()
  192. {
  193. char buff[1000];
  194. memset(buff,0,sizeof(buff));
  195. m_pSocket->Receive(buff, sizeof(buff),0);
  196. CString strTemp = buff;
  197. strTemp += _T("rn");
  198. m_MessageList.ReplaceSel(strTemp);
  199. return TRUE;
  200. }
  201. void CMyChatDlg::UpdateUser()
  202. {
  203. char buff[1000];
  204. memset(buff,0,sizeof(buff));
  205. m_pSocket->Receive(buff, sizeof(buff),0);
  206. CString user_info = buff;
  207. CString array[100];
  208. int b = 0;
  209. for( int i=0; i<user_info.GetLength(); i++ )
  210. {
  211. if(i != (user_info.GetLength() - 1))
  212. {
  213. if ( user_info[i]=='&' )
  214. {
  215. b ++;
  216. }
  217. else
  218. {
  219. array[b] = array[b] + user_info[i];
  220. }
  221. }
  222. }
  223. m_UserList.ResetContent();
  224. for(int j=0; j<b+1; j++)
  225. {
  226. m_UserList.AddString(array[j]);
  227. }
  228. }