QQDlg.cpp 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979
  1. // QQDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "QQ.h"
  5. #include "QQDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. // CQQDlg 对话框
  10. CQQDlg::CQQDlg(CWnd* pParent /*=NULL*/)
  11. : CSkinManager(IDD_QQ_DIALOG, pParent)
  12. {
  13. m_pImageSearch = NULL;
  14. m_pImageSearchText = NULL;
  15. m_bShowEdit = false;
  16. }
  17. CQQDlg::~CQQDlg()
  18. {
  19. }
  20. void CQQDlg::DoDataExchange(CDataExchange* pDX)
  21. {
  22. CSkinManager::DoDataExchange(pDX);
  23. DDX_Control(pDX,IDC_EDIT_WRITE,m_EditWrite);
  24. DDX_Control(pDX,IDC_EDIT_SEARCH,m_EditSearch);
  25. }
  26. BEGIN_MESSAGE_MAP(CQQDlg, CSkinManager)
  27. ON_MESSAGE(WM_USER_LOGON,OnLogonMessage)
  28. ON_WM_DESTROY()
  29. ON_WM_SIZE()
  30. ON_WM_TIMER()
  31. ON_WM_NCHITTEST()
  32. ON_WM_SIZING()
  33. ON_WM_MOVING()
  34. ON_WM_LBUTTONDOWN()
  35. ON_WM_ERASEBKGND()
  36. ON_WM_GETMINMAXINFO()
  37. ON_EN_KILLFOCUS(IDC_EDIT_WRITE, &CQQDlg::OnEnKillfocusEditPass)
  38. ON_EN_KILLFOCUS(IDC_EDIT_SEARCH, &CQQDlg::OnEnKillfocusEditSearch)
  39. ON_WM_SETCURSOR()
  40. ON_NOTIFY(TCN_DROPDOWN, IDC_TABCTRL, &CQQDlg::OnTcnDropDownMenu)
  41. ON_NOTIFY(TCN_SELCHANGE, IDC_TABCTRL, &CQQDlg::OnTcnSelchangeType)
  42. ON_NOTIFY(NM_DBLCLK, IDC_BUDDYLIST, &CQQDlg::OnBnClickOpenChat)
  43. END_MESSAGE_MAP()
  44. // CQQDlg 消息处理程序
  45. BOOL CQQDlg::OnInitDialog()
  46. {
  47. CSkinManager::OnInitDialog();
  48. //修改风格使得他不在任务栏显示
  49. ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
  50. //隐藏主窗口
  51. WINDOWPLACEMENT wp;
  52. wp.length=sizeof(WINDOWPLACEMENT);
  53. wp.flags=WPF_RESTORETOMAXIMIZED;
  54. wp.showCmd=SW_HIDE;
  55. SetWindowPlacement(&wp);
  56. //创建登陆窗口
  57. m_LogonDlg.Create(IDD_LOGON,this);
  58. m_LogonDlg.CenterWindow();
  59. m_LogonDlg.ShowWindow(SW_SHOW);
  60. srand(unsigned int(time(NULL)));
  61. SetExtrude(true);
  62. SetClipChild(true);
  63. m_HideWindow.SetHideWindow(GetSafeHwnd());
  64. //GlobalUnits->m_WindowArray.push_back(this);
  65. return TRUE;
  66. }
  67. LRESULT CQQDlg::OnLogonMessage( WPARAM wParam,LPARAM lParam )
  68. {
  69. //销毁登陆
  70. m_LogonDlg.PostMessage(WM_CLOSE);
  71. //显示主窗口
  72. WINDOWPLACEMENT wp;
  73. wp.length=sizeof(WINDOWPLACEMENT);
  74. wp.flags=WPF_RESTORETOMAXIMIZED;
  75. wp.showCmd=SW_SHOW;
  76. SetWindowPlacement(&wp);
  77. SetWindowPos(NULL,0,0,281,700,SWP_SHOWWINDOW);
  78. CenterWindow();
  79. UpdataResource();
  80. return TRUE;
  81. }
  82. void CQQDlg::OnDestroy()
  83. {
  84. CSkinManager::OnDestroy();
  85. RenderEngine->RemoveImage(m_pImageSearch);
  86. RenderEngine->RemoveImage(m_pImageSearchText);
  87. m_ftName.DeleteObject();
  88. }
  89. void CQQDlg::DrawClientArea( CDC*pDC,int nWidth,int nHeight )
  90. {
  91. CSkinManager::DrawClientArea(pDC,nWidth,nHeight);
  92. if ( m_pImageSearch != NULL && !m_pImageSearch->IsNull() )
  93. {
  94. m_pImageSearch->Draw(pDC,CRect(1,140,nWidth-1,140+m_pImageSearch->GetHeight()),CRect(3,3,25,3));
  95. m_pImageSearchText->DrawImage(pDC,5,150);
  96. if ( m_bShowEdit )
  97. {
  98. pDC->FillSolidRect(1,140,nWidth-1,m_pImageSearch->GetHeight(),RGB(255,255,255));
  99. }
  100. }
  101. //绘制边框
  102. RenderEngine->DrawRoundRect(pDC->GetSafeHdc(),CRect(0,0,nWidth-1,nHeight-1),6,6,1,RGB(92,89,82));
  103. pDC->SetBkMode(TRANSPARENT);
  104. CFont *pOldFont=pDC->SelectObject(&m_ftName);
  105. pDC->DrawText(m_StrName,CRect(7,45,125,72),DT_LEFT|DT_TOP|DT_SINGLELINE|DT_END_ELLIPSIS);
  106. pDC->SelectObject(pOldFont);
  107. }
  108. void CQQDlg::OnSize(UINT nType, int cx, int cy)
  109. {
  110. CSkinManager::OnSize(nType, cx, cy);
  111. //移动准备
  112. HDWP hDwp=BeginDeferWindowPos(64);
  113. UINT uFlags=SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOZORDER;
  114. //控制按钮
  115. DeferWindowPos(hDwp,m_btClose,NULL,cx-41,0,0,0,uFlags|SWP_NOSIZE);
  116. DeferWindowPos(hDwp,m_btMin,NULL,cx-70,0,0,0,uFlags|SWP_NOSIZE);
  117. DeferWindowPos(hDwp,m_btSkin,NULL,cx-97,0,0,0,uFlags|SWP_NOSIZE);
  118. DeferWindowPos(hDwp,m_btWrite,NULL,7,75,cx-68,23,uFlags);
  119. DeferWindowPos(hDwp,m_EditSearch,NULL,6,146,cx-30,17,uFlags);
  120. DeferWindowPos(hDwp,m_EditWrite,NULL,7,75,cx-68,23,uFlags);
  121. DeferWindowPos(hDwp,m_btClearSearch,NULL,cx-20,140,0,0,uFlags|SWP_NOSIZE);
  122. DeferWindowPos(hDwp,m_btState,NULL,7+GetNameLength(),55,0,0,uFlags|SWP_NOSIZE);
  123. DeferWindowPos(hDwp,m_TabCtrl,NULL,1,172,cx,35,uFlags);
  124. if( m_TabCtrl.GetSafeHwnd() )
  125. m_TabCtrl.SetItemSize(CSize((cx-2)/3-1,35),&CSize((cx-2)/3-20,20));
  126. DeferWindowPos(hDwp,m_BuddyList,NULL,1,207,cx-3,cy-282,uFlags);
  127. DeferWindowPos(hDwp,m_GroupList,NULL,1,207,cx-3,cy-282,uFlags);
  128. DeferWindowPos(hDwp,m_MsgList,NULL,1,207,cx-3,cy-282,uFlags);
  129. for (int i=0;i<5;i++)
  130. {
  131. DeferWindowPos(hDwp,m_btQQApp[i],NULL,5+27*i,cy-53,0,0,uFlags|SWP_NOSIZE);
  132. }
  133. DeferWindowPos(hDwp,m_btMenu,NULL,5,cy-25,0,0,uFlags|SWP_NOSIZE);
  134. for (int i =0;i<4;i++)
  135. {
  136. DeferWindowPos(hDwp,m_btTool[i],NULL,35+27*i,cy-25,0,0,uFlags|SWP_NOSIZE);
  137. }
  138. //结束调整
  139. LockWindowUpdate();
  140. EndDeferWindowPos(hDwp);
  141. UnlockWindowUpdate();
  142. //设置圆角
  143. CRgn rgn;
  144. rgn.CreateRoundRectRgn(0,0,cx,cy,4,4);
  145. SetWindowRgn(rgn,FALSE);
  146. //更新界面
  147. Invalidate(FALSE);
  148. }
  149. void CQQDlg::OnLButtonDown(UINT nFlags, CPoint point)
  150. {
  151. CRect rcClient;
  152. GetClientRect(&rcClient);
  153. SetFocus();
  154. if ( PtInRect(&CRect(1,140,rcClient.Width()-1,171),point) )
  155. {
  156. m_bShowEdit = true;
  157. m_EditSearch.ShowWindow(SW_SHOW);
  158. m_btClearSearch.ShowWindow(SW_SHOW);
  159. m_EditSearch.SetFocus();
  160. InvalidateRect(&CRect(1,140,rcClient.Width()-1,171),FALSE);
  161. }
  162. else
  163. PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
  164. CSkinManager::OnLButtonDown(nFlags, point);
  165. }
  166. void CQQDlg::UpdataResource()
  167. {
  168. HDC hParentDC = GetBackDC();
  169. CRect rcClient;
  170. GetClientRect(&rcClient);
  171. m_pImageSearch = RenderEngine->GetImage(TEXT("QQ\\Main\\serach_edit.png"));
  172. m_pImageSearchText = RenderEngine->GetImage(TEXT("QQ\\Main\\serach_edit_text.png"));
  173. m_ftName.CreateFont(30,0,0,0,FW_NORMAL,0,FALSE,0,0,0,0,0,0,TEXT("微软雅黑"));
  174. m_StrName = TEXT("丄偙寵ル");
  175. m_StrNote = TEXT("编辑个性签名");
  176. m_btSkin.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rcClient.Width()-97,0,0,0),this,IDC_WNDSKIN);
  177. m_btSkin.SetBackImage(TEXT("\\QQ\\Main\\btn_Skin_normal.png"),TEXT("\\QQ\\Main\\btn_Skin_highlight.png"),TEXT("\\QQ\\Main\\btn_Skin_down.png"),TEXT("\\QQ\\Main\\btn_Skin_normal.png"));
  178. m_btSkin.SetButtonType(en_PushButton);
  179. m_btSkin.SetParentBack(hParentDC);
  180. m_btSkin.SetSize(28,20);
  181. m_btWrite.Create(m_StrNote,WS_VISIBLE|WS_CHILD,CRect(7,75,rcClient.Width()-68,98),this,IDC_BT_WRITE);
  182. m_btWrite.SetBackImage(NULL,TEXT("QQ\\Button\\allbtn_highlight.png"),TEXT("QQ\\Button\\allbtn_down.png"),NULL,&CRect(3,3,3,3));
  183. m_btWrite.SetButtonType(en_IconButton);
  184. m_btWrite.SetParentBack(hParentDC);
  185. m_btWrite.SetTextAlign(DT_LEFT|DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS);
  186. m_btWrite.SetSize(rcClient.Width()-68,23);
  187. m_btClearSearch.Create(NULL,WS_CHILD,CRect(rcClient.Width()-22,140,0,0),this,0);
  188. m_btClearSearch.SetBackImage(TEXT("\\QQ\\Main\\main_search_delhighlight.png"),TEXT("\\QQ\\Main\\main_search_delhighlight.png"),TEXT("\\QQ\\Main\\main_search_deldown.png"),TEXT("\\QQ\\Main\\main_search_delhighlight.png"));
  189. m_btClearSearch.SetButtonType(en_PushButton);
  190. m_btClearSearch.SetParentBack(hParentDC);
  191. m_btClearSearch.SetSize(18,28);
  192. m_btState.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(7+GetNameLength(),55,0,0),this,0);
  193. m_btState.SetBackImage(NULL,TEXT("QQ\\Button\\allbtn_highlight.png"),TEXT("QQ\\Button\\allbtn_down.png"),NULL);
  194. m_btState.SetIconImage(TEXT("QQ\\Status\\imonline.png"));
  195. m_btState.SetButtonType(en_IconButton);
  196. m_btState.SetParentBack(hParentDC);
  197. m_btState.SetSize(19,19);
  198. //App
  199. for (int i =0;i<5;i++)
  200. {
  201. m_btQQApp[i].Create(NULL,WS_VISIBLE|WS_CHILD,CRect(5+27*i,rcClient.Height()-53,0,0),this,0);
  202. m_btQQApp[i].SetBackImage(NULL,TEXT("QQ\\Button\\allbtn_highlight.png"),TEXT("QQ\\Button\\allbtn_down.png"),NULL);
  203. m_btQQApp[i].SetButtonType(en_IconButton);
  204. m_btQQApp[i].SetParentBack(hParentDC);
  205. m_btQQApp[i].SetSize(20,20);
  206. }
  207. m_btQQApp[0].SetIconImage(TEXT("QQ\\Main\\app1.png"));
  208. m_btQQApp[1].SetIconImage(TEXT("QQ\\Main\\app2.png"));
  209. m_btQQApp[2].SetIconImage(TEXT("QQ\\Main\\app3.png"));
  210. m_btQQApp[3].SetIconImage(TEXT("QQ\\Main\\app4.png"));
  211. m_btQQApp[4].SetIconImage(TEXT("QQ\\Main\\app5.png"));
  212. //qq菜单按钮
  213. m_btMenu.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(5,rcClient.Height()-25,0,0),this,IDC_MAINMENU);
  214. m_btMenu.SetBackImage(TEXT("QQ\\Main\\menu_btn_normal.png"),TEXT("QQ\\Main\\menu_btn_highlight.png"),TEXT("QQ\\Main\\menu_btn_highlight.png"),TEXT("QQ\\Main\\menu_btn_normal.png"));
  215. m_btMenu.SetButtonType(en_PushButton);
  216. m_btMenu.SetParentBack(hParentDC);
  217. m_btMenu.SetSize(21,20);
  218. //QQ工具按钮
  219. for (int i =0;i<4;i++)
  220. {
  221. m_btTool[i].Create(NULL,WS_VISIBLE|WS_CHILD,CRect(35+27*i,rcClient.Height()-25,0,0),this,0);
  222. m_btTool[i].SetBackImage(NULL,TEXT("QQ\\Button\\allbtn_highlight.png"),TEXT("QQ\\Button\\allbtn_down.png"),NULL);
  223. m_btTool[i].SetButtonType(en_IconButton);
  224. m_btTool[i].SetParentBack(hParentDC);
  225. m_btTool[i].SetSize(20,20);
  226. }
  227. m_btTool[0].SetIconImage(TEXT("QQ\\Main\\Tools.png"));
  228. m_btTool[1].SetIconImage(TEXT("QQ\\Main\\message.png"));
  229. m_btTool[2].SetIconImage(TEXT("QQ\\Main\\filemanager.png"));
  230. m_btTool[3].SetIconImage(TEXT("QQ\\Main\\Finger_Normal.png"));
  231. m_btTool[3].SetWindowText(TEXT("查找"));
  232. m_btTool[3].SetSize(55,20);
  233. //QQ应用按钮
  234. CString str;
  235. for (int i =0;i<4;i++)
  236. {
  237. str.Format(TEXT("%d "),i+1);
  238. m_btApply[i].Create(str,WS_VISIBLE|WS_CHILD,CRect(5+37*i,114,0,0),this,0);
  239. m_btApply[i].SetBackImage(NULL,TEXT("QQ\\Button\\allbtn_highlight.png"),TEXT("QQ\\Button\\allbtn_down.png"),NULL);
  240. m_btApply[i].SetButtonType(en_IconButton);
  241. m_btApply[i].SetParentBack(hParentDC);
  242. m_btApply[i].SetSize(30,20);
  243. }
  244. m_btApply[0].SetIconImage(TEXT("QQ\\Main\\qzoneicon.png"));
  245. m_btApply[1].SetIconImage(TEXT("QQ\\Main\\wblogicon.png"));
  246. m_btApply[2].SetIconImage(TEXT("QQ\\Main\\friendicon.png"));
  247. m_btApply[3].SetIconImage(TEXT("QQ\\Main\\qqshowicon.png"));
  248. InitTabCtrl();
  249. //好友列表
  250. InitBuddyList();
  251. //群列表
  252. InitGroupList();
  253. //消息列表
  254. InitMsgList();
  255. }
  256. void CQQDlg::InitTabCtrl()
  257. {
  258. CRect rcClient;
  259. GetClientRect(&rcClient);
  260. m_TabCtrl.Create(WS_VISIBLE|WS_CHILD|TCS_FIXEDWIDTH,CRect(1,172,rcClient.Width()-1,207),this,IDC_TABCTRL);
  261. int nIndex = m_TabCtrl.AddItem(0, STCI_STYLE_DROPDOWN);
  262. m_TabCtrl.SetItemToolTipText(nIndex, TEXT("联系人"));
  263. m_TabCtrl.SetItemIconImage(nIndex, TEXT("QQ\\Main\\icon_contacts_normal.png"),
  264. TEXT("QQ\\Main\\icon_contacts_selected.png"));
  265. nIndex = m_TabCtrl.AddItem(1, STCI_STYLE_DROPDOWN);
  266. m_TabCtrl.SetItemToolTipText(nIndex, TEXT("会话"));
  267. m_TabCtrl.SetItemIconImage(nIndex, TEXT("QQ\\Main\\icon_last_normal.png"),
  268. TEXT("QQ\\Main\\icon_last_selected.png"));
  269. nIndex = m_TabCtrl.AddItem(2, STCI_STYLE_DROPDOWN);
  270. m_TabCtrl.SetItemToolTipText(nIndex, TEXT("群/讨论组"));
  271. m_TabCtrl.SetItemIconImage(nIndex, TEXT("QQ\\Main\\icon_group_normal.png"),
  272. TEXT("QQ\\Main\\icon_group_selected.png"));
  273. m_TabCtrl.SetItemsImage(NULL, TEXT("QQ\\Main\\tab_dots_highlight.png"),
  274. TEXT("QQ\\Main\\tab_dots_down.png"), CRect(5,5,5,5));
  275. m_TabCtrl.SetItemsArrowImage(TEXT("QQ\\Main\\main_tabbtn_highlight.png"),
  276. TEXT("QQ\\Main\\main_tabbtn_down.png"));
  277. m_TabCtrl.SetParentBack(GetBackDC());
  278. m_TabCtrl.SetItemSize(CSize((rcClient.Width()-2)/3-1,35),&CSize((rcClient.Width()-2)/3-20,20));
  279. m_TabCtrl.SetCurSel(0);
  280. }
  281. void CQQDlg::InitBuddyList()
  282. {
  283. CRect rcClient;
  284. GetClientRect(&rcClient);
  285. m_BuddyList.Create(NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(1,207,rcClient.Width()-2,rcClient.Height()-60),this,IDC_BUDDYLIST);
  286. m_BuddyList.SetMargin(CRect(2,0,2,0));
  287. m_BuddyList.SetBgPic(TEXT("QQ\\BuddyList\\Bg.png"));
  288. m_BuddyList.SetBuddyTeamHotBgPic(TEXT("QQ\\BuddyList\\BuddyTeamHotBg.png"));
  289. m_BuddyList.SetBuddyItemHotBgPic(TEXT("QQ\\BuddyList\\BuddyItemHotBg.png"), CRect(1,1,1,1));
  290. m_BuddyList.SetBuddyItemSelBgPic(TEXT("QQ\\BuddyList\\BuddyItemSelBg.png"), CRect(1,1,1,1));
  291. m_BuddyList.SetHeadFramePic(TEXT("QQ\\BuddyList\\Padding4Select.png"), CRect(6,6,6,6));
  292. m_BuddyList.SetNormalArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTexture.png"));
  293. m_BuddyList.SetHotArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTextureHighlight.png"));
  294. m_BuddyList.SetSelArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTextureHighlight.png"));
  295. m_BuddyList.SetNormalExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTexture.png"));
  296. m_BuddyList.SetHotExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTextureHighlight.png"));
  297. m_BuddyList.SetSelExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTextureHighlight.png"));
  298. m_BuddyList.SetStdGGHeadPic(TEXT("QQ\\BuddyList\\trad_boy.png"));
  299. m_BuddyList.SetStdMMHeadPic(TEXT("QQ\\BuddyList\\trad_girl.png"));
  300. m_BuddyList.SetStyle(BLC_BIG_ICON_STYLE);
  301. m_BuddyList.SetShowBigIconInSel(TRUE);
  302. m_BuddyList.SetBuddyTeamHeight(24);
  303. m_BuddyList.SetBuddyItemHeightInBigIcon(54);
  304. m_BuddyList.SetBuddyItemHeightInSmallIcon(28);
  305. m_BuddyList.SetBuddyItemHeightInStandardIcon(24);
  306. m_BuddyList.SetBuddyItemPadding(1);
  307. //插入跟节点
  308. LPCTSTR lpszRootName[] = {TEXT("我的好友"),TEXT("陌生人"),TEXT("黑名单")};
  309. int nTeamIndex = 0;
  310. TCHAR szWorkDirectory[MAX_PATH]={0};
  311. RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
  312. CString strQQ,StrNick,StrMark,StrFace;
  313. int nItemCount = 0;
  314. for (int i=0;i<CountArray(lpszRootName);i++)
  315. {
  316. //插入根节点
  317. nTeamIndex = m_BuddyList.AddBuddyTeam(i);
  318. m_BuddyList.SetBuddyTeamName(nTeamIndex, lpszRootName[i]);
  319. m_BuddyList.SetBuddyTeamMaxCnt(nTeamIndex, 10);
  320. m_BuddyList.SetBuddyTeamCurCnt(nTeamIndex, 10);
  321. m_BuddyList.SetBuddyTeamExpand(nTeamIndex, FALSE);
  322. nItemCount = 5+rand()%10;
  323. //插入子节点
  324. for (int j=0;j<nItemCount;j++)
  325. {
  326. int nIndex = m_BuddyList.AddBuddyItem(nTeamIndex, 5);
  327. strQQ.Format(TEXT("%u"),100000+rand()%1000000000);
  328. m_BuddyList.SetBuddyItemQQNum(nTeamIndex, nIndex, strQQ);
  329. StrNick.Format(TEXT("昵称_%d"),j+1);
  330. m_BuddyList.SetBuddyItemNickName(nTeamIndex, nIndex, StrNick);
  331. StrMark.Format(TEXT("%s-备注_%d"),m_BuddyList.GetBuddyTeamName(nTeamIndex),j+1);
  332. m_BuddyList.SetBuddyItemMarkName(nTeamIndex, nIndex, StrMark);
  333. m_BuddyList.SetBuddyItemGender(nTeamIndex, nIndex, (i%2==0)?TRUE:FALSE);
  334. StrFace.Format(TEXT("%s\\QQ\\Face\\%d.png"),szWorkDirectory,(1+rand()%264));
  335. m_BuddyList.SetBuddyItemHeadPic(nTeamIndex, nIndex, StrFace, ((nItemCount-2)>j ? false:true));
  336. m_BuddyList.SetBuddyItemOnline(nTeamIndex, nIndex, ((nItemCount-2)<j ? false:true), FALSE);
  337. m_BuddyList.SetBuddyItemSign(nTeamIndex,nIndex,TEXT("跟我一起学MFC 【http://www.gymsaga.com】"));
  338. }
  339. }
  340. //QQ头像闪动--QQ消息
  341. m_BuddyList.SetBuddyItemHeadFlashAnim(nTeamIndex,0,TRUE);
  342. //上线,下线动画
  343. m_BuddyList.SetBuddyItemOnline(nTeamIndex,1,FALSE,TRUE);
  344. }
  345. void CQQDlg::InitGroupList()
  346. {
  347. CRect rcClient;
  348. GetClientRect(&rcClient);
  349. m_GroupList.Create(NULL,NULL,WS_CHILD,CRect(1,207,rcClient.Width()-2,rcClient.Height()-60),this,0);
  350. m_GroupList.SetMargin(CRect(2,0,2,0));
  351. m_GroupList.SetBgPic(TEXT("QQ\\BuddyList\\Bg.png"));
  352. m_GroupList.SetBuddyTeamHotBgPic(TEXT("QQ\\BuddyList\\BuddyTeamHotBg.png"));
  353. m_GroupList.SetBuddyItemHotBgPic(TEXT("QQ\\BuddyList\\BuddyItemHotBg.png"), CRect(1,1,1,1));
  354. m_GroupList.SetBuddyItemSelBgPic(TEXT("QQ\\BuddyList\\BuddyItemSelBg.png"), CRect(1,1,1,1));
  355. m_GroupList.SetHeadFramePic(TEXT("QQ\\BuddyList\\Padding4Select.png"), CRect(6,6,6,6));
  356. m_GroupList.SetNormalArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTexture.png"));
  357. m_GroupList.SetHotArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTextureHighlight.png"));
  358. m_GroupList.SetSelArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTextureHighlight.png"));
  359. m_GroupList.SetNormalExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTexture.png"));
  360. m_GroupList.SetHotExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTextureHighlight.png"));
  361. m_GroupList.SetSelExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTextureHighlight.png"));
  362. m_GroupList.SetStdGGHeadPic(TEXT("QQ\\BuddyList\\trad_boy.png"));
  363. m_GroupList.SetStdMMHeadPic(TEXT("QQ\\BuddyList\\trad_girl.png"));
  364. m_GroupList.SetStyle(BLC_BIG_ICON_STYLE);
  365. m_GroupList.SetShowBigIconInSel(TRUE);
  366. m_GroupList.SetBuddyTeamHeight(24);
  367. m_GroupList.SetBuddyItemHeightInBigIcon(54);
  368. m_GroupList.SetBuddyItemHeightInSmallIcon(28);
  369. m_GroupList.SetBuddyItemHeightInStandardIcon(24);
  370. m_GroupList.SetBuddyItemPadding(1);
  371. int nGroupCount = 5;
  372. int nTeamIndex = m_GroupList.AddBuddyTeam(0);
  373. m_GroupList.SetBuddyTeamName(nTeamIndex, TEXT("我的QQ群"));
  374. m_GroupList.SetBuddyTeamMaxCnt(nTeamIndex, nGroupCount);
  375. m_GroupList.SetBuddyTeamCurCnt(nTeamIndex, nGroupCount);
  376. m_GroupList.SetBuddyTeamExpand(nTeamIndex, FALSE);
  377. TCHAR szWorkDirectory[MAX_PATH]={0};
  378. RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
  379. StrCat(szWorkDirectory,TEXT("\\QQ\\BuddyList\\DefGroupHeadPic.jpg"));
  380. for (int i = 0; i < nGroupCount; i++)
  381. {
  382. int nIndex = m_GroupList.AddBuddyItem(nTeamIndex, i);
  383. m_GroupList.SetBuddyItemNickName(nTeamIndex, nIndex,TEXT("跟我一起学MFC"));
  384. m_GroupList.SetBuddyItemHeadPic(nTeamIndex, nIndex, szWorkDirectory, FALSE);
  385. }
  386. }
  387. void CQQDlg::InitMsgList()
  388. {
  389. CRect rcClient;
  390. GetClientRect(&rcClient);
  391. m_MsgList.Create(NULL,NULL,WS_CHILD,CRect(1,207,rcClient.Width()-2,rcClient.Height()-60),this,0);
  392. m_MsgList.SetMargin(CRect(2,0,2,0));
  393. m_MsgList.SetBgPic(TEXT("QQ\\BuddyList\\Bg.png"));
  394. m_MsgList.SetBuddyTeamHotBgPic(TEXT("QQ\\BuddyList\\BuddyTeamHotBg.png"));
  395. m_MsgList.SetBuddyItemHotBgPic(TEXT("QQ\\BuddyList\\BuddyItemHotBg.png"), CRect(1,1,1,1));
  396. m_MsgList.SetBuddyItemSelBgPic(TEXT("QQ\\BuddyList\\BuddyItemSelBg.png"), CRect(1,1,1,1));
  397. m_MsgList.SetHeadFramePic(TEXT("QQ\\BuddyList\\Padding4Select.png"), CRect(6,6,6,6));
  398. m_MsgList.SetNormalArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTexture.png"));
  399. m_MsgList.SetHotArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTextureHighlight.png"));
  400. m_MsgList.SetSelArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_collapseTextureHighlight.png"));
  401. m_MsgList.SetNormalExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTexture.png"));
  402. m_MsgList.SetHotExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTextureHighlight.png"));
  403. m_MsgList.SetSelExpArrowPic(TEXT("QQ\\BuddyList\\MainPanel_FolderNode_expandTextureHighlight.png"));
  404. m_MsgList.SetStdGGHeadPic(TEXT("QQ\\BuddyList\\trad_boy.png"));
  405. m_MsgList.SetStdMMHeadPic(TEXT("QQ\\BuddyList\\trad_girl.png"));
  406. m_MsgList.SetStyle(BLC_BIG_ICON_STYLE);
  407. m_MsgList.SetShowBigIconInSel(TRUE);
  408. m_MsgList.SetBuddyTeamHeight(24);
  409. m_MsgList.SetBuddyItemHeightInBigIcon(54);
  410. m_MsgList.SetBuddyItemHeightInSmallIcon(28);
  411. m_MsgList.SetBuddyItemHeightInStandardIcon(24);
  412. m_MsgList.SetBuddyItemPadding(1);
  413. int nTeamIndex = m_MsgList.AddBuddyTeam(-1);
  414. m_MsgList.SetBuddyTeamName(nTeamIndex, TEXT("最近联系人"));
  415. m_MsgList.SetBuddyTeamExpand(nTeamIndex, FALSE);
  416. int nRecentCount = 20;
  417. TCHAR szWorkDirectory[MAX_PATH]={0};
  418. RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
  419. CString StrFace,StrGroup;
  420. for (int i = 0; i < nRecentCount; i++)
  421. {
  422. if ( (rand()%100)%2 == 0)
  423. {
  424. //插入好友
  425. CString strQQNum;
  426. strQQNum.Format(TEXT("%u"),100000+rand()%1000000000 );
  427. BOOL bGender = (i%2==0)?TRUE:FALSE;
  428. BOOL bGray = (i%3==0)?FALSE:TRUE;
  429. StrFace.Format(TEXT("%s\\QQ\\Face\\%d.png"),szWorkDirectory,(1+rand()%264));
  430. int nIndex = m_MsgList.AddBuddyItem(nTeamIndex, i);
  431. m_MsgList.SetBuddyItemQQNum(nTeamIndex, nIndex, strQQNum);
  432. m_MsgList.SetBuddyItemNickName(nTeamIndex, nIndex, TEXT("联系人-昵称"));
  433. m_MsgList.SetBuddyItemMarkName(nTeamIndex, nIndex, TEXT("联系人-备注"));
  434. m_MsgList.SetBuddyItemSign(nTeamIndex,nIndex,TEXT("跟我一起学MFC 【http://www.gymsaga.com】"));
  435. m_MsgList.SetBuddyItemGender(nTeamIndex, nIndex, bGender);
  436. m_MsgList.SetBuddyItemHeadPic(nTeamIndex, nIndex, StrFace, bGray);
  437. }
  438. else
  439. {
  440. //插入群
  441. StrGroup.Format(TEXT("%s\\QQ\\BuddyList\\DefGroupHeadPic.jpg"),szWorkDirectory);
  442. int nIndex = m_MsgList.AddBuddyItem(nTeamIndex, i);
  443. m_MsgList.SetBuddyItemNickName(nTeamIndex, nIndex, TEXT("跟我一起学MFC"));
  444. m_MsgList.SetBuddyItemHeadPic(nTeamIndex, nIndex, StrGroup, FALSE);
  445. }
  446. }
  447. m_MsgList.SetBuddyTeamMaxCnt(nTeamIndex, nRecentCount);
  448. m_MsgList.SetBuddyTeamCurCnt(nTeamIndex, nRecentCount);
  449. }
  450. BOOL CQQDlg::OnEraseBkgnd(CDC* pDC)
  451. {
  452. return TRUE;
  453. }
  454. void CQQDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
  455. {
  456. lpMMI->ptMaxTrackSize.x = 545;
  457. lpMMI->ptMinTrackSize.x = WND_MINSIZE_X;
  458. lpMMI->ptMinTrackSize.y = WND_MINSIZE_Y;
  459. CSkinManager::OnGetMinMaxInfo(lpMMI);
  460. }
  461. void CQQDlg::OnEnKillfocusEditPass()
  462. {
  463. CString str;
  464. m_EditWrite.GetWindowText(str);
  465. if( str.GetLength() != 0 )
  466. m_btWrite.SetWindowText(str);
  467. m_EditWrite.ShowWindow(SW_HIDE);
  468. m_btWrite.ShowWindow(SW_SHOW);
  469. }
  470. void CQQDlg::OnEnKillfocusEditSearch()
  471. {
  472. m_bShowEdit = false;
  473. CRect rcClient;
  474. GetClientRect(&rcClient);
  475. m_EditSearch.ShowWindow(SW_HIDE);
  476. if(m_btClearSearch.GetSafeHwnd())
  477. m_btClearSearch.ShowWindow(SW_HIDE);
  478. InvalidateRect(&CRect(1,140,rcClient.Width()-1,171),FALSE);
  479. }
  480. BOOL CQQDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
  481. {
  482. CRect rcClient;
  483. GetClientRect(&rcClient);
  484. CPoint point;
  485. GetCursorPos(&point);
  486. ScreenToClient(&point);
  487. if ( PtInRect(&CRect(1,140,rcClient.Width()-30,171),point) )
  488. {
  489. SetCursor(LoadCursor(NULL,IDC_IBEAM));
  490. return TRUE;
  491. }
  492. return CSkinManager::OnSetCursor(pWnd, nHitTest, message);
  493. }
  494. int CQQDlg::GetNameLength()
  495. {
  496. CDC*pDC = GetDC();
  497. SIZE szText = RenderEngine->GetTextSize(pDC->GetSafeHdc(),m_StrName,m_ftName,0);
  498. ReleaseDC(pDC);
  499. if( szText.cx >125) szText.cx = 125;
  500. return szText.cx;
  501. }
  502. void CQQDlg::OnTcnDropDownMenu( NMHDR *pNMHDR, LRESULT *pResult )
  503. {
  504. //构造菜单
  505. CSkinMenu MainMenu;
  506. if (!MainMenu.CreatePopupMenu()) return;
  507. //创建子菜单
  508. CSkinMenu SubMenu;
  509. SubMenu.CreateMenu();
  510. switch ( m_TabCtrl.GetCurSel() )
  511. {
  512. case 0:
  513. {
  514. SubMenu.AppendMenu(3000,TEXT("大头像"),NULL,NULL,MF_POPUP);
  515. SubMenu.AppendMenu(3001,TEXT("小头像"),NULL,NULL,MF_POPUP);
  516. SubMenu.AppendSeparator();
  517. SubMenu.AppendMenu(3002,TEXT("选中时显示大头像"),NULL,NULL,MF_POPUP);
  518. SubMenu.AppendSeparator();
  519. SubMenu.AppendMenu(3003,TEXT("显示我的头像"),NULL,NULL,MF_POPUP | MF_CHECKED);
  520. SubMenu.SetMenuBarImage(TEXT("QQ\\Menu\\menu_left_bg.png"),&CRect(2,2,2,2));
  521. SubMenu.SetMenuBackImage(TEXT("QQ\\Menu\\menu_right_bg.png"),&CRect(2,2,2,2));
  522. SubMenu.SetMenuHovenImage(TEXT("QQ\\Menu\\menu_selected.png"),&CRect(2,2,2,2));
  523. SubMenu.SetSeparatorImage(TEXT("QQ\\Menu\\menu_separtor.png"),&CRect(2,2,2,2));
  524. SubMenu.SetCheckImage(TEXT("QQ\\Menu\\menu_check.png"));
  525. //设置Check属性--当前显示为大头像
  526. if( m_BuddyList.GetStyle() == BLC_BIG_ICON_STYLE )
  527. {
  528. SubMenu.CheckMenuItem(3000,MF_POPUP|MF_CHECKED);
  529. SubMenu.EnableMenuItem(3002,MF_POPUP|MF_GRAYED);
  530. }
  531. //当前显示为小头像
  532. if( m_BuddyList.GetStyle() == BLC_SMALL_ICON_STYLE )
  533. {
  534. SubMenu.CheckMenuItem(3001,MF_POPUP|MF_CHECKED);
  535. SubMenu.EnableMenuItem(3002,MF_POPUP|MF_ENABLED);
  536. SubMenu.CheckMenuItem(3002,MF_POPUP|MF_CHECKED);
  537. }
  538. //当前显示为正常头像
  539. if( m_BuddyList.GetStyle() == BLC_STANDARD_ICON_STYLE )
  540. {
  541. SubMenu.CheckMenuItem(3001,MF_POPUP|MF_CHECKED);
  542. SubMenu.CheckMenuItem(3002,MF_POPUP|MF_ENABLED);
  543. SubMenu.CheckMenuItem(3002,MF_POPUP|MF_UNCHECKED);
  544. }
  545. MainMenu.InsertMenu((UINT)SubMenu.m_hMenu,TEXT("头像显示"),4000,TEXT("QQ\\Menu\\modehead.png"),NULL,MF_POPUP|MF_STRING|MF_BYPOSITION);
  546. MainMenu.AppendMenu(4001,TEXT("名称显示"));
  547. MainMenu.AppendMenu(4002,TEXT("列表显示"));
  548. MainMenu.AppendSeparator();
  549. MainMenu.AppendMenu(4003,TEXT("排列显示"));
  550. MainMenu.AppendMenu(4004,TEXT("刷新好友列表"));
  551. MainMenu.AppendSeparator();
  552. MainMenu.AppendMenu(4005,TEXT("显示在线联系人"));
  553. MainMenu.AppendSeparator();
  554. MainMenu.AppendMenu(4006,TEXT("显示企业分组"));
  555. MainMenu.AppendMenu(4007,TEXT("显示陌生人分组"));
  556. MainMenu.AppendMenu(4008,TEXT("显示黑名单"));
  557. }
  558. break;
  559. case 1:
  560. {
  561. MainMenu.AppendMenu(5000,TEXT("漫游会话列表"),NULL,NULL,MF_POPUP | MF_CHECKED);
  562. MainMenu.AppendMenu(5001,TEXT("清空会话列表"));
  563. }
  564. break;
  565. case 2:
  566. {
  567. SubMenu.AppendMenu(3000,TEXT("大图标"),NULL,NULL,MF_POPUP);
  568. SubMenu.AppendMenu(3001,TEXT("小图标"),NULL,NULL,MF_POPUP);
  569. SubMenu.AppendSeparator();
  570. SubMenu.AppendMenu(3002,TEXT("选中时显示大图标"),NULL,NULL,MF_POPUP|MF_DISABLED);
  571. SubMenu.SetMenuBarImage(TEXT("QQ\\Menu\\menu_left_bg.png"),&CRect(2,2,2,2));
  572. SubMenu.SetMenuBackImage(TEXT("QQ\\Menu\\menu_right_bg.png"),&CRect(2,2,2,2));
  573. SubMenu.SetMenuHovenImage(TEXT("QQ\\Menu\\menu_selected.png"),&CRect(2,2,2,2));
  574. SubMenu.SetSeparatorImage(TEXT("QQ\\Menu\\menu_separtor.png"),&CRect(2,2,2,2));
  575. SubMenu.SetCheckImage(TEXT("QQ\\Menu\\menu_check.png"));
  576. //设置Check属性--当前显示为大头像
  577. if( m_GroupList.GetStyle() == BLC_BIG_ICON_STYLE )
  578. {
  579. SubMenu.CheckMenuItem(3000,MF_POPUP|MF_CHECKED);
  580. SubMenu.EnableMenuItem(3002,MF_POPUP|MF_GRAYED);
  581. }
  582. //当前显示为小头像
  583. if( m_GroupList.GetStyle() == BLC_SMALL_ICON_STYLE )
  584. {
  585. SubMenu.CheckMenuItem(3001,MF_POPUP|MF_CHECKED);
  586. SubMenu.EnableMenuItem(3002,MF_POPUP|MF_ENABLED);
  587. SubMenu.CheckMenuItem(3002,MF_POPUP|MF_CHECKED);
  588. }
  589. //当前显示为正常头像
  590. if( m_GroupList.GetStyle() == BLC_STANDARD_ICON_STYLE )
  591. {
  592. SubMenu.CheckMenuItem(3001,MF_POPUP|MF_CHECKED);
  593. SubMenu.CheckMenuItem(3002,MF_POPUP|MF_ENABLED);
  594. SubMenu.CheckMenuItem(3002,MF_POPUP|MF_UNCHECKED);
  595. }
  596. MainMenu.InsertMenu((UINT)SubMenu.m_hMenu,TEXT("图标显示"),4000,TEXT("QQ\\Menu\\modehead.png"),NULL,MF_POPUP|MF_STRING|MF_BYPOSITION);
  597. MainMenu.AppendMenu(4001,TEXT("列表显示"));
  598. MainMenu.AppendSeparator();
  599. MainMenu.AppendMenu(4002,TEXT("访问QQ群官网"),TEXT("QQ\\Menu\\groupmainpage.png"));
  600. MainMenu.AppendMenu(4003,TEXT("所有群消息设置 "));
  601. MainMenu.AppendSeparator();
  602. MainMenu.AppendMenu(4004,TEXT("查找添加群"));
  603. MainMenu.AppendMenu(4005,TEXT("创建一个群"));
  604. MainMenu.AppendSeparator();
  605. MainMenu.AppendMenu(4006,TEXT("添加群分组"));
  606. }
  607. break;
  608. }
  609. MainMenu.SetMenuBarImage(TEXT("QQ\\Menu\\menu_left_bg.png"),&CRect(2,2,2,2));
  610. MainMenu.SetMenuBackImage(TEXT("QQ\\Menu\\menu_right_bg.png"),&CRect(2,2,2,2));
  611. MainMenu.SetMenuHovenImage(TEXT("QQ\\Menu\\menu_selected.png"),&CRect(2,2,2,2));
  612. MainMenu.SetSeparatorImage(TEXT("QQ\\Menu\\menu_separtor.png"),&CRect(2,2,2,2));
  613. MainMenu.SetCheckImage(TEXT("QQ\\Menu\\menu_check.png"));
  614. MainMenu.SetArrowImage(TEXT("QQ\\Menu\\menu_arrow.png"));
  615. CPoint pt;
  616. GetCursorPos(&pt);
  617. CRect rcControl;
  618. m_TabCtrl.GetWindowRect(rcControl);
  619. MainMenu.TrackPopupMenu(pt.x,rcControl.bottom+3,this);
  620. }
  621. void CQQDlg::OnTcnSelchangeType( NMHDR *pNMHDR, LRESULT *pResult )
  622. {
  623. switch ( m_TabCtrl.GetCurSel() )
  624. {
  625. case 0:
  626. {
  627. m_BuddyList.ShowWindow(SW_SHOW);
  628. m_MsgList.ShowWindow(SW_HIDE);
  629. m_GroupList.ShowWindow(SW_HIDE);
  630. }
  631. break;
  632. case 1:
  633. {
  634. m_BuddyList.ShowWindow(SW_HIDE);
  635. m_MsgList.ShowWindow(SW_SHOW);
  636. m_GroupList.ShowWindow(SW_HIDE);
  637. }
  638. break;
  639. case 2:
  640. {
  641. m_BuddyList.ShowWindow(SW_HIDE);
  642. m_MsgList.ShowWindow(SW_HIDE);
  643. m_GroupList.ShowWindow(SW_SHOW);
  644. }
  645. break;
  646. }
  647. }
  648. BOOL CQQDlg::OnCommand(WPARAM wParam, LPARAM lParam)
  649. {
  650. switch ( LOWORD( wParam))
  651. {
  652. case IDC_MAINMENU:
  653. {
  654. //构造菜单
  655. CSkinMenu MainMenu;
  656. if (!MainMenu.CreatePopupMenu()) return FALSE;
  657. MainMenu.AppendSeparator();
  658. MainMenu.AppendMenu(2002,TEXT("所有服务"),TEXT("QQ\\Menu\\school_mood.png"));
  659. MainMenu.AppendMenu(2002,TEXT("QQ会员"),TEXT("QQ\\Menu\\vip_head.png"));
  660. MainMenu.AppendMenu(2002,TEXT("我的QQ中心"),TEXT("QQ\\Menu\\1.png"));
  661. MainMenu.AppendSeparator();
  662. MainMenu.AppendMenu(2002,TEXT("工具"),TEXT("QQ\\Menu\\2.png"));
  663. MainMenu.AppendMenu(2002,TEXT("软件升级"),TEXT("QQ\\Menu\\app_icon_16.png"));
  664. MainMenu.AppendSeparator();
  665. MainMenu.AppendMenu(2002,TEXT("安全中心"),TEXT("QQ\\Menu\\QQSafe.png"));
  666. MainMenu.AppendMenu(2002,TEXT("帮助"),TEXT("QQ\\Menu\\16.png"));
  667. MainMenu.AppendSeparator();
  668. MainMenu.AppendMenu(2002,TEXT("好友管理器 "),TEXT("QQ\\Menu\\contactmgr.png"));
  669. MainMenu.AppendMenu(2002,TEXT("修改密码"),TEXT("QQ\\Menu\\password.png"));
  670. MainMenu.AppendMenu(2002,TEXT("更改用户"),TEXT("QQ\\Menu\\safe.png"));
  671. MainMenu.AppendMenu(2002,TEXT("锁定QQ"),TEXT("QQ\\Menu\\lock20.png"));
  672. MainMenu.AppendMenu(1,TEXT("退出"),TEXT("QQ\\Menu\\AppMenuExt_MoveToBlackList.png"));
  673. MainMenu.SetMenuBarImage(TEXT("QQ\\Menu\\menu_left_bg.png"),&CRect(2,2,2,2));
  674. MainMenu.SetMenuBackImage(TEXT("QQ\\Menu\\menu_right_bg.png"),&CRect(2,2,2,2));
  675. MainMenu.SetMenuHovenImage(TEXT("QQ\\Menu\\menu_selected.png"),&CRect(2,2,2,2));
  676. MainMenu.SetSeparatorImage(TEXT("QQ\\Menu\\menu_separtor.png"),&CRect(2,2,2,2));
  677. MainMenu.SetCheckImage(TEXT("QQ\\Menu\\menu_check.png"));
  678. MainMenu.SetArrowImage(TEXT("QQ\\Menu\\menu_arrow.png"));
  679. CPoint pt;
  680. GetCursorPos(&pt);
  681. CRect rcControl;
  682. m_btMenu.GetWindowRect(rcControl);
  683. ((CMenu*)&MainMenu)->TrackPopupMenu(TPM_LEFTBUTTON|TPM_BOTTOMALIGN,rcControl.left,rcControl.top,this);
  684. }
  685. break;
  686. case IDC_WNDMIN:
  687. {
  688. ShowWindow(SW_MINIMIZE);
  689. break;
  690. }
  691. case IDC_WNDSKIN:
  692. {
  693. if ( m_SkinManager.GetSafeHwnd() == NULL )
  694. {
  695. m_SkinManager.Create(IDD_SKIN);
  696. }
  697. m_SkinManager.ShowWindow(SW_SHOW);
  698. m_SkinManager.CenterWindow(GetDesktopWindow());
  699. break;
  700. }
  701. case IDC_BT_WRITE:
  702. {
  703. m_EditWrite.ShowWindow(SW_SHOW);
  704. m_EditWrite.SetFocus();
  705. m_btWrite.ShowWindow(SW_HIDE);
  706. break;
  707. }
  708. case 3000: //大头像
  709. {
  710. if ( m_BuddyList.IsWindowVisible() )
  711. {
  712. m_BuddyList.SetStyle(BLC_BIG_ICON_STYLE);
  713. m_BuddyList.Invalidate(FALSE);
  714. }
  715. if ( m_GroupList.IsWindowVisible() )
  716. {
  717. m_GroupList.SetStyle(BLC_BIG_ICON_STYLE);
  718. m_GroupList.Invalidate(FALSE);
  719. }
  720. break;
  721. }
  722. case 3001: //小头像
  723. {
  724. if ( m_BuddyList.IsWindowVisible() )
  725. {
  726. m_BuddyList.SetStyle(BLC_SMALL_ICON_STYLE);
  727. m_BuddyList.Invalidate(FALSE);
  728. }
  729. if ( m_GroupList.IsWindowVisible() )
  730. {
  731. m_GroupList.SetStyle(BLC_SMALL_ICON_STYLE);
  732. m_GroupList.Invalidate(FALSE);
  733. }
  734. break;
  735. }
  736. case 3002: //小头像
  737. {
  738. if ( m_BuddyList.IsWindowVisible() )
  739. {
  740. m_BuddyList.SetStyle(BLC_STANDARD_ICON_STYLE);
  741. m_BuddyList.Invalidate(FALSE);
  742. }
  743. if ( m_GroupList.IsWindowVisible() )
  744. {
  745. m_GroupList.SetStyle(BLC_STANDARD_ICON_STYLE);
  746. m_GroupList.Invalidate(FALSE);
  747. }
  748. break;
  749. }
  750. }
  751. return CSkinManager::OnCommand(wParam, lParam);
  752. }
  753. void CQQDlg::OnTimer( UINT nIDEvent )
  754. {
  755. m_HideWindow.HideLoop(nIDEvent);
  756. CSkinManager::OnTimer(nIDEvent);
  757. }
  758. LRESULT CQQDlg::OnNcHitTest( CPoint point )
  759. {
  760. m_HideWindow.BeginHide(point);
  761. return CSkinManager::OnNcHitTest(point);
  762. }
  763. void CQQDlg::OnSizing( UINT fwSide, LPRECT pRect )
  764. {
  765. CSkinManager::OnSizing(fwSide, pRect);
  766. m_HideWindow.FixSizing(fwSide,pRect);
  767. }
  768. void CQQDlg::OnMoving( UINT fwSide, LPRECT pRect )
  769. {
  770. CSkinManager::OnMoving(fwSide, pRect);
  771. m_HideWindow.FixMoving(fwSide,pRect);
  772. }
  773. void CQQDlg::OnBnClickOpenChat( NMHDR *pNMHDR, LRESULT *pResult )
  774. {
  775. int nSelTeamIndex = m_BuddyList.GetSelTeamIndex();
  776. int nSelIndex = m_BuddyList.GetSelIndex();
  777. if ( m_BuddyList.IsBuddyItemHasMsg(nSelTeamIndex,nSelIndex) )
  778. {
  779. m_BuddyList.SetBuddyItemHeadFlashAnim(nSelTeamIndex,nSelIndex,FALSE);
  780. }
  781. for (int i=0;i<GlobalUnits->m_ChatArray.size();i++)
  782. {
  783. CChatDlg * pChatDlg = GlobalUnits->m_ChatArray.at(i);
  784. if ( StrCmp(pChatDlg->m_pBuddyItem->m_strQQNum, m_BuddyList.GetBuddyItemQQNum(nSelTeamIndex,nSelIndex) ) == 0 )
  785. {
  786. pChatDlg->ShowWindow(SW_SHOW);
  787. pChatDlg->SetForegroundWindow();
  788. return;
  789. }
  790. }
  791. CChatDlg *pChatDlg = new CChatDlg;
  792. pChatDlg->Create(IDD_CHAT);
  793. pChatDlg->ShowWindow(SW_SHOW);
  794. pChatDlg->CenterWindow(GetDesktopWindow());
  795. pChatDlg->m_pBuddyItem = m_BuddyList.GetBuddyItemByIndex(nSelTeamIndex,nSelIndex);
  796. GlobalUnits->m_ChatArray.push_back(pChatDlg);
  797. }