ShowOnlineDlg.cpp
上传用户:guangzhiyw
上传日期:2007-01-09
资源大小:495k
文件大小:7k
源码类别:

ICQ/即时通讯

开发平台:

Visual C++

  1. // ShowOnlineDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "client.h"
  5. #include "ShowOnlineDlg.h"
  6. #include "FriendDetail.h"
  7. #include "addfrienddlg.h"
  8. #include "mainfrm.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CShowOnlineDlg dialog
  16. CShowOnlineDlg::CShowOnlineDlg(CWnd* pParent /*=NULL*/)
  17. : CDialog(CShowOnlineDlg::IDD, pParent)
  18. {
  19. //{{AFX_DATA_INIT(CShowOnlineDlg)
  20. // NOTE: the ClassWizard will add member initialization here
  21. //}}AFX_DATA_INIT
  22. hIcon=AfxGetApp()->LoadIcon(IDR_SEARCH);
  23. m_pDlg=NULL;
  24. bStartSearch=FALSE;
  25. }
  26. void CShowOnlineDlg::DoDataExchange(CDataExchange* pDX)
  27. {
  28. CDialog::DoDataExchange(pDX);
  29. //{{AFX_DATA_MAP(CShowOnlineDlg)
  30. DDX_Control(pDX, IDC_NEXTPAGE, m_nextbutton);
  31. DDX_Control(pDX, IDC_LASTPAGE, m_lastbutton);
  32. DDX_Control(pDX, IDC_LIST1, m_List);
  33. //}}AFX_DATA_MAP
  34. }
  35. BEGIN_MESSAGE_MAP(CShowOnlineDlg, CDialog)
  36. //{{AFX_MSG_MAP(CShowOnlineDlg)
  37. ON_BN_CLICKED(IDC_NEXTPAGE, OnNextpage)
  38. ON_BN_CLICKED(IDC_LASTPAGE, OnLastpage)
  39. ON_WM_CLOSE()
  40. ON_WM_SHOWWINDOW()
  41. ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
  42. ON_WM_TIMER()
  43. ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRclickList1)
  44. ON_COMMAND(ID_ADD_FRIEND, OnAddFriend)
  45. ON_COMMAND(ID_FRIENDS_DETAIL, OnFriendDetail)
  46. ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
  47. //}}AFX_MSG_MAP
  48. ON_MESSAGE(WM_RECIEVE_MSG,OnRecvShowOnline)
  49. END_MESSAGE_MAP()
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CShowOnlineDlg message handlers
  52. BOOL CShowOnlineDlg::OnInitDialog() 
  53. {
  54. CDialog::OnInitDialog();
  55. SetIcon(hIcon,TRUE);
  56. SetIcon(hIcon,FALSE);
  57. CMenu* pMenu=GetSystemMenu(FALSE);
  58. pMenu->EnableMenuItem(SC_RESTORE,MF_GRAYED|MF_DISABLED);
  59. pMenu->EnableMenuItem(SC_SIZE,MF_GRAYED|MF_DISABLED);
  60. pMenu->EnableMenuItem(SC_MAXIMIZE,MF_GRAYED|MF_DISABLED);
  61. CRect rect;
  62. LV_COLUMN lvcolumn;
  63. TCHAR rgtsz[3][10] = {_T("号码"), _T("姓名"), _T("部门")};
  64. m_List.GetClientRect(&rect);
  65. int cx[3]={rect.Width()*3/10,rect.Width()*3/10,rect.Width()*4/10};
  66. for (int i=0;i<3;i++)
  67. {
  68. lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
  69. lvcolumn.fmt = LVCFMT_LEFT;
  70. lvcolumn.pszText = rgtsz[i];
  71. lvcolumn.iSubItem = i;
  72. lvcolumn.cx=cx[i];
  73. m_List.InsertColumn(i, &lvcolumn);
  74. }
  75. m_List.SetImageList(&GetApp()->m_imaSmallHead,LVSIL_SMALL);
  76. msg.index=APPLY_SHOW_ONLINE;
  77. msg.MyId=GetApp()->m_uCurrentUserID;
  78. msg.tarIP=GetApp()->m_uServerIP;
  79. msg.nPort=GetApp()->m_uServerPort;
  80. msg.Value=0;
  81. m_lastbutton.EnableWindow(FALSE);
  82. bClose=TRUE;
  83. return TRUE;
  84. }
  85. void CShowOnlineDlg::OnCancel() 
  86. {
  87.   bCancel=TRUE;
  88. bClose=TRUE;
  89. msg.Value=0;
  90. m_lastbutton.EnableWindow(FALSE);
  91. m_nextbutton.EnableWindow();
  92. m_List.DeleteAllItems();
  93. CDialog::OnCancel();
  94. }
  95. void CShowOnlineDlg::OnClose() 
  96. {
  97. OnCancel();
  98. }
  99. void CShowOnlineDlg::OnOK() 
  100. {
  101. OnCancel();
  102. }
  103. void CShowOnlineDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
  104. {
  105. CDialog::OnShowWindow(bShow, nStatus);
  106. if(!bShow)return;
  107. if(bClose)
  108. {
  109. msg.Value=0;
  110. OnRefresh();
  111. }
  112. bClose=FALSE;
  113. }
  114. void CShowOnlineDlg::OnRefresh() 
  115. {
  116. if(!GetApp()->m_bOnlineState)
  117. {
  118. CString str;
  119. str.LoadString(IDS_NOT_LOGIN_SERVER);
  120. MessageBox(str);
  121. return;
  122. }
  123. if(int(msg.Value*PersonNumEveryTime)<=GetApp()->m_nTotalOnline)
  124. {
  125. m_List.DeleteAllItems();
  126. bCancel=FALSE;
  127. if(GetApp()->m_Socket.SendData(&msg,bCancel,this))
  128. {
  129. bStartSearch=TRUE;
  130. BeginWaitCursor();
  131. SetTimer(1,TimeWaitForSearch,NULL);
  132. }
  133. else
  134. {
  135. CString str;
  136. str.LoadString(IDS_SERVER_NOT_RES);
  137. MessageBox(str);
  138. return;
  139. }
  140. }
  141. }
  142. void CShowOnlineDlg::OnNextpage() 
  143. {
  144. if(int((msg.Value+1)*PersonNumEveryTime)<=GetApp()->m_nTotalOnline)
  145. {
  146. msg.Value++;
  147. m_lastbutton.EnableWindow();
  148. OnRefresh();
  149. }
  150. }
  151. void CShowOnlineDlg::OnLastpage() 
  152. {
  153. if(msg.Value>0)
  154. {
  155. msg.Value--;
  156. if(msg.Value>0)m_lastbutton.EnableWindow();
  157. else m_lastbutton.EnableWindow(FALSE);
  158. OnRefresh();
  159. }
  160. }
  161. void CShowOnlineDlg::OnTimer(UINT nIDEvent) 
  162. {
  163. if(nIDEvent==1)
  164. {
  165. bStartSearch=FALSE;
  166. KillTimer(1);
  167. EndWaitCursor();
  168. }
  169. LRESULT CShowOnlineDlg::OnRecvShowOnline(WPARAM wParam,LPARAM lParam)
  170. {
  171. CData *pData=(CData*)wParam;
  172. if(pData->index==RECV_SHOW_ONLINE&&bStartSearch)
  173. {
  174. bStartSearch=FALSE;
  175. EndWaitCursor();
  176. CShowOnlinePeople msg1;
  177. CopyDataBuf(&msg1,pData);
  178. if(!msg1.LoadFromBuf())return 0;
  179. LVITEM lv;
  180. int iPos;
  181. char temp[100];
  182. for(int k=0;k<msg1.aId.GetSize();k++)
  183. {
  184. lv.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
  185. lv.iImage=msg1.aPhotoId.GetAt(k);
  186. lv.iSubItem=0;
  187. lv.iItem=k;
  188. itoa(msg1.aId.GetAt(k),temp,10);
  189. lv.pszText=temp;
  190. lv.lParam=msg1.aId.GetAt(k);
  191. iPos=m_List.InsertItem(&lv);
  192. lv.mask=LVIF_TEXT;
  193. lv.iItem=iPos;
  194. lv.iSubItem=1;
  195. lstrcpy(temp,msg1.aName.GetAt(k));
  196. lv.pszText=temp;
  197. m_List.SetItem(&lv);
  198. lv.iSubItem=2;
  199. lstrcpy(temp,msg1.aDepartment.GetAt(k));
  200. lv.pszText=temp;
  201. m_List.SetItem(&lv);
  202. }
  203. TRACE0("IS RECV SHOW ONLINE");
  204. return 1;
  205. }
  206. return 0;
  207. }
  208. void CShowOnlineDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
  209. {
  210. POSITION pos=m_List.GetFirstSelectedItemPosition();
  211. if(pos==NULL)return;
  212. CMenu menu,*pMenu=NULL;
  213. if(!menu.LoadMenu(IDR_POPMENU))
  214. return;
  215. pMenu=menu.GetSubMenu(1);
  216. CPoint mouse;
  217. GetCursorPos(&mouse);
  218. pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,
  219. mouse.x,
  220. mouse.y,
  221. this);
  222. *pResult = 0;
  223. }
  224. void CShowOnlineDlg::OnAddFriend() 
  225. {
  226. POSITION pos=m_List.GetFirstSelectedItemPosition();
  227. if(pos==NULL)return;
  228. int index=m_List.GetNextSelectedItem(pos);
  229. CAddFriendDlg *& pDlg=((CMainFrame*)GetApp()->m_pMainWnd)->m_pAddFriendDlg;
  230. if(pDlg==NULL)
  231. {
  232. pDlg=new CAddFriendDlg;
  233. pDlg->Create(CAddFriendDlg::IDD);
  234. }
  235. pDlg->uID=m_List.GetItemData(index);
  236. pDlg->SendMessage(WM_NOTICE_ADDFRIEND);
  237. }
  238. void CShowOnlineDlg::OnFriendDetail() 
  239. {
  240. memset(&Info,0,sizeof(Info));
  241. POSITION pos=m_List.GetFirstSelectedItemPosition();
  242. if(pos==NULL)return;
  243. int index=m_List.GetNextSelectedItem(pos);
  244. Info.Id=m_List.GetItemData(index);
  245. Info.HaveDetail=0;
  246. if(m_pDlg==NULL)
  247. {
  248. m_pDlg=new CFriendDetailDlg;
  249. m_pDlg->Create(CFriendDetailDlg::IDD,GetDesktopWindow());
  250. }
  251. m_pDlg->SendMessage(WM_SHOW_FRIEND_DETAIL,(WPARAM)&Info,0);
  252. m_pDlg->OnRefresh();
  253. }
  254. void CShowOnlineDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
  255. {
  256. POSITION pos=m_List.GetFirstSelectedItemPosition();
  257. if(pos!=NULL)PostMessage(WM_COMMAND,ID_FRIENDS_DETAIL,0);
  258. *pResult = 0;
  259. }