SysMsgDlg.cpp
上传用户:zslianheng
上传日期:2013-04-03
资源大小:946k
文件大小:6k
源码类别:

Linux/Unix编程

开发平台:

Visual C++

  1. /***************************************************************************
  2.  *                                                                         *
  3.  *   This program is free software; you can redistribute it and/or modify  *
  4.  *   it under the terms of the GNU General Public License as published by  *
  5.  *   the Free Software Foundation; either version 2 of the License, or     *
  6.  *   (at your option) any later version.                                   *
  7.  *                                                                         *
  8.  *   copyright            : (C) 2002 by Zhang Yong                         *
  9.  *   email                : z-yong163@163.com                              *
  10.  ***************************************************************************/
  11. // SysMsgDlg.cpp : implementation file
  12. //
  13. #include "stdafx.h"
  14. #include "myicq.h"
  15. #include "SysMsgDlg.h"
  16. #include "ViewDetailDlg.h"
  17. #include "serversession.h"
  18. #include "icqlink.h"
  19. #ifdef _DEBUG
  20. #define new DEBUG_NEW
  21. #undef THIS_FILE
  22. static char THIS_FILE[] = __FILE__;
  23. #endif
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CSysMsgDlg dialog
  26. CSysMsgDlg::CSysMsgDlg(IcqMsg *msg, BOOL autoDelete, CWnd* pParent /*=NULL*/)
  27. : CMyDlg(CSysMsgDlg::IDD, pParent), IcqWindow(WIN_SYS_MESSAGE, msg->uin)
  28. {
  29. //{{AFX_DATA_INIT(CSysMsgDlg)
  30. //}}AFX_DATA_INIT
  31. this->msg = msg;
  32. this->autoDelete = autoDelete;
  33. expanded = TRUE;
  34. }
  35. CSysMsgDlg::CSysMsgDlg(uint32 uin, CWnd* pParent /*=NULL*/)
  36. : CMyDlg(CSysMsgDlg::IDD, pParent), IcqWindow(WIN_ADD_FRIEND, uin)
  37. {
  38. msg = NULL;
  39. expanded = TRUE;
  40. }
  41. CSysMsgDlg::~CSysMsgDlg()
  42. {
  43. if (autoDelete && msg)
  44. delete msg;
  45. }
  46. void CSysMsgDlg::enableControls(BOOL enable)
  47. {
  48. GetDlgItem(IDC_REQ_ACCEPT)->EnableWindow(enable);
  49. GetDlgItem(IDC_REQ_REJECT)->EnableWindow(enable);
  50. GetDlgItem(IDC_REQUEST)->EnableWindow(enable);
  51. if (icqLink->findContact(uin))
  52. GetDlgItem(IDC_ADD_FRIEND)->EnableWindow(
  53. enable && (icqLink->findContact(uin) != NULL));
  54. }
  55. void CSysMsgDlg::shrink()
  56. {
  57. int h = wholeSize.cy - lowerHeight;
  58. SetWindowPos(NULL, 0, 0, wholeSize.cx, h, SWP_NOZORDER | SWP_NOMOVE);
  59. expanded = FALSE;
  60. }
  61. void CSysMsgDlg::expand()
  62. {
  63. SetWindowPos(NULL, 0, 0, wholeSize.cx, wholeSize.cy, SWP_NOZORDER | SWP_NOMOVE);
  64. expanded = TRUE;
  65. }
  66. void CSysMsgDlg::onAck(uint32 seq)
  67. {
  68. DestroyWindow();
  69. }
  70. void CSysMsgDlg::onSendError(uint32 seq)
  71. {
  72. CString str;
  73. str.LoadString(IDS_TIMEOUT);
  74. SetDlgItemText(IDC_MSG, str);
  75. m_btnPic.stop();
  76. enableControls(FALSE);
  77. if (expanded)
  78. shrink();
  79. }
  80. void CSysMsgDlg::onAddFriendReply(uint8 result)
  81. {
  82. m_btnPic.stop();
  83. enableControls(TRUE);
  84. if (result == ADD_FRIEND_ACCEPTED)
  85. DestroyWindow();
  86. else if (result == ADD_FRIEND_AUTH_REQ) {
  87. CString str;
  88. str.LoadString(IDS_AUTH_REQUIRED);
  89. SetDlgItemText(IDC_MSG, str);
  90. expand();
  91. GetDlgItem(IDC_REQUEST)->SetFocus();
  92. } else if (result == ADD_FRIEND_REJECTED) {
  93. CString str;
  94. str.LoadString(IDS_ADD_REJECTED);
  95. SetDlgItemText(IDC_MSG, str);
  96. }
  97. }
  98. void CSysMsgDlg::DoDataExchange(CDataExchange* pDX)
  99. {
  100. CMyDlg::DoDataExchange(pDX);
  101. //{{AFX_DATA_MAP(CSysMsgDlg)
  102. DDX_Control(pDX, IDC_MSG, m_edtMsg);
  103. DDX_Control(pDX, IDC_PIC, m_btnPic);
  104. //}}AFX_DATA_MAP
  105. }
  106. BEGIN_MESSAGE_MAP(CSysMsgDlg, CMyDlg)
  107. //{{AFX_MSG_MAP(CSysMsgDlg)
  108. ON_BN_CLICKED(IDC_PIC, OnPic)
  109. ON_BN_CLICKED(IDC_REQ_ACCEPT, OnReqAccept)
  110. ON_BN_CLICKED(IDC_REQ_REJECT, OnReqReject)
  111. ON_BN_CLICKED(IDC_SEND_REQUEST, OnSendRequest)
  112. ON_BN_CLICKED(IDC_ADD_FRIEND, OnAddFriend)
  113. //}}AFX_MSG_MAP
  114. END_MESSAGE_MAP()
  115. /////////////////////////////////////////////////////////////////////////////
  116. // CSysMsgDlg message handlers
  117. BOOL CSysMsgDlg::OnInitDialog() 
  118. {
  119. CMyDlg::OnInitDialog();
  120. CRect rc;
  121. GetWindowRect(rc);
  122. wholeSize = rc.Size();
  123. GetDlgItem(IDC_LOWER)->GetWindowRect(rc);
  124. lowerHeight = rc.Height();
  125. shrink();
  126. m_btnPic.setImageList(&getApp()->largeImageList, getApp()->nrFaces);
  127. IcqContact *contact = icqLink->findContact(uin);
  128. if (msg) {
  129. uint8 pic = 0;
  130. string nick;
  131. if (msg->type == MSG_AUTH_REQUEST) {
  132. TextInStream in(msg->text.c_str());
  133. in >> pic >> nick;
  134. } else {
  135. GetDlgItem(IDC_REQ_ACCEPT)->ShowWindow(SW_HIDE);
  136. GetDlgItem(IDC_REQ_REJECT)->ShowWindow(SW_HIDE);
  137. if (msg->type != MSG_ADDED)
  138. GetDlgItem(IDC_ADD_FRIEND)->ShowWindow(SW_HIDE);
  139. }
  140. SetDlgItemText(IDC_NICK, nick.c_str());
  141. CString str;
  142. getMsgText(msg, str);
  143. SetDlgItemText(IDC_MSG, str);
  144. m_btnPic.stop(pic);
  145. if (contact)
  146. GetDlgItem(IDC_ADD_FRIEND)->EnableWindow(FALSE);
  147. } else {
  148. GetDlgItem(IDC_REQ_ACCEPT)->ShowWindow(SW_HIDE);
  149. GetDlgItem(IDC_REQ_REJECT)->ShowWindow(SW_HIDE);
  150. if (contact) {
  151. SetDlgItemText(IDC_NICK, contact->nick.c_str());
  152. m_btnPic.stop(contact->face);
  153. }
  154. OnAddFriend();
  155. }
  156. SetDlgItemInt(IDC_UIN, uin, FALSE);
  157. return TRUE;  // return TRUE unless you set the focus to a control
  158.               // EXCEPTION: OCX Property Pages should return FALSE
  159. }
  160. void CSysMsgDlg::OnCancel() 
  161. {
  162. DestroyWindow();
  163. }
  164. void CSysMsgDlg::PostNcDestroy() 
  165. {
  166. delete this;
  167. }
  168. void CSysMsgDlg::OnPic() 
  169. {
  170. CViewDetailDlg *win = new CViewDetailDlg(uin);
  171. win->Create(this);
  172. }
  173. void CSysMsgDlg::OnReqAccept() 
  174. {
  175. enableControls(FALSE);
  176. seq = serverSession()->sendMessage(MSG_AUTH_ACCEPTED, uin, "");
  177. }
  178. void CSysMsgDlg::OnReqReject() 
  179. {
  180. CString str;
  181. if (m_edtMsg.GetStyle() & ES_READONLY) {
  182. m_edtMsg.SetReadOnly(FALSE);
  183. str.LoadString(IDS_PROMPT_REJECT_REASON);
  184. m_edtMsg.SetWindowText(str);
  185. m_edtMsg.SetSel(0, -1);
  186. m_edtMsg.SetFocus();
  187. } else {
  188. enableControls(FALSE);
  189. m_edtMsg.GetWindowText(str);
  190. seq = serverSession()->sendMessage(MSG_AUTH_REJECTED, uin, str);
  191. }
  192. }
  193. void CSysMsgDlg::OnSendRequest() 
  194. {
  195. CString str;
  196. GetDlgItemText(IDC_REQUEST, str);
  197. enableControls(FALSE);
  198. IcqUser &info = icqLink->myInfo;
  199. TextOutStream out;
  200. out << info.face << info.nick.c_str() << str;
  201. seq = serverSession()->sendMessage(MSG_AUTH_REQUEST, uin, out);
  202. }
  203. void CSysMsgDlg::OnAddFriend() 
  204. {
  205. CString str;
  206. str.LoadString(IDS_ADD_FRIEND_REQ);
  207. SetDlgItemText(IDC_MSG, str);
  208. enableControls(FALSE);
  209. m_btnPic.start();
  210. seq = serverSession()->addFriend(uin);
  211. }