LogonDlg.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. // LogonDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "QQ.h"
  5. #include "LogonDlg.h"
  6. #define IDC_CLOSE 2001
  7. #define IDC_MIN 2002
  8. #define IDC_FINDACCOUNT 2003
  9. #define IDC_APPLYACCOUNT 2004
  10. #define IDC_REMPASS 2005
  11. #define IDC_AUTOLOGON 2006
  12. #define IDC_LOGON 2007
  13. #define IDC_STATE 2008
  14. //计时器
  15. #define IDI_LOGON_STATE 100
  16. #define IDI_GIF 101
  17. // CLogonDlg 对话框
  18. IMPLEMENT_DYNAMIC(CLogonDlg, CSkinDialog)
  19. CLogonDlg::CLogonDlg(CWnd* pParent /*=NULL*/)
  20. : CSkinDialog(IDD_LOGON, pParent)
  21. {
  22. m_pImageBack = NULL;
  23. m_pImageFace = NULL;
  24. m_pImageLogo = NULL;
  25. m_pImageShadow = NULL;
  26. m_bLogoning = false;
  27. m_nFrameIndex = 0;
  28. }
  29. CLogonDlg::~CLogonDlg()
  30. {
  31. }
  32. void CLogonDlg::DoDataExchange(CDataExchange* pDX)
  33. {
  34. CSkinDialog::DoDataExchange(pDX);
  35. DDX_Control(pDX,IDC_ACCOUNT,m_ComAccount);
  36. DDX_Control(pDX,IDC_EDIT_PASS,m_EtPassWord);
  37. }
  38. BEGIN_MESSAGE_MAP(CLogonDlg, CSkinDialog)
  39. ON_WM_DESTROY()
  40. ON_WM_LBUTTONDOWN()
  41. ON_MESSAGE(WM_EDIT_CLICK,OnClickPass)
  42. ON_WM_TIMER()
  43. ON_WM_ERASEBKGND()
  44. END_MESSAGE_MAP()
  45. // CLogonDlg 消息处理程序
  46. BOOL CLogonDlg::OnInitDialog()
  47. {
  48. __super::OnInitDialog();
  49. HDC hParentDC = GetBackDC();
  50. m_pImageBack = RenderEngine->GetImage(TEXT("QQ\\logon\\noon.png"));
  51. m_pImageFace = RenderEngine->GetImage(TEXT("QQ\\logon\\DefaultFace.png"));
  52. m_pImageLogo = RenderEngine->GetImage(TEXT("QQ\\Main_Title.png"));
  53. m_pImageShadow = RenderEngine->GetImage(TEXT("QQ\\logon\\facebg.png"));
  54. if( m_pImageBack == NULL || m_pImageBack->IsNull() )
  55. {
  56. AfxMessageBox(TEXT("加载资源失败"));
  57. return FALSE;
  58. }
  59. int nWidth = m_pImageBack->GetWidth();
  60. int nHeight = m_pImageBack->GetHeight();
  61. TCHAR szWorkDirectory[MAX_PATH]={0};
  62. RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
  63. StrCat(szWorkDirectory,TEXT("\\QQ\\logon\\loading.gif"));
  64. m_GifLogon.LoadFromFile(szWorkDirectory);
  65. //开启计时器
  66. SetTimer(IDI_GIF,150,NULL);
  67. //LoadFlash(nWidth, nHeight);
  68. m_btClose.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(nWidth-41,-1,0,0),this,IDC_CLOSE);
  69. m_btClose.SetBackImage(TEXT("\\QQ\\Button\\btn_close_normal.png"),TEXT("\\QQ\\Button\\btn_close_highlight.png"),TEXT("\\QQ\\Button\\btn_close_down.png"),TEXT("\\QQ\\Button\\btn_close_normal.png"));
  70. m_btClose.SetButtonType(en_PushButton);
  71. m_btClose.SetParentBack(hParentDC);
  72. m_btClose.SetSize(39,20);
  73. m_btMin.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(nWidth-69,-1,0,0),this,IDC_MIN);
  74. m_btMin.SetBackImage(TEXT("\\QQ\\Button\\btn_mini_normal.png"),TEXT("\\QQ\\Button\\btn_mini_highlight.png"),TEXT("\\QQ\\Button\\btn_mini_down.png"),TEXT("\\QQ\\Button\\btn_mini_normal.png"));
  75. m_btMin.SetButtonType(en_PushButton);
  76. m_btMin.SetParentBack(hParentDC);
  77. m_btMin.SetSize(28,20);
  78. m_btFindPass.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(311,185,0,0),this,IDC_FINDACCOUNT);
  79. m_btFindPass.SetBackImage(TEXT("\\QQ\\logon\\mima.png"),TEXT("\\QQ\\logon\\mima_hover.png"),TEXT("\\QQ\\logon\\mima_press.png"),TEXT("\\QQ\\logon\\mima.png"));
  80. m_btFindPass.SetButtonType(en_PushButton);
  81. m_btFindPass.SetParentBack(hParentDC);
  82. m_btFindPass.SetSize(51,16);
  83. m_btApplyAcoount.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(311,150,0,0),this,IDC_APPLYACCOUNT);
  84. m_btApplyAcoount.SetBackImage(TEXT("\\QQ\\logon\\zhuce.png"),TEXT("\\QQ\\logon\\zhuce_hover.png"),TEXT("\\QQ\\logon\\zhuce_press.png"),TEXT("\\QQ\\logon\\zhuce.png"));
  85. m_btApplyAcoount.SetButtonType(en_PushButton);
  86. m_btApplyAcoount.SetParentBack(hParentDC);
  87. m_btApplyAcoount.SetSize(51,16);
  88. m_btRemPass.Create(TEXT("记住密码"),WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX,CRect(112,212,0,0),this,IDC_REMPASS);
  89. m_btRemPass.SetCheckImage(TEXT("QQ\\CheckBox\\checkbox_normal.png"),TEXT("QQ\\CheckBox\\checkbox_hightlight.png"),TEXT("QQ\\CheckBox\\checkbox_tick_normal.png"),TEXT("QQ\\CheckBox\\checkbox_tick_highlight.png"));
  90. m_btRemPass.SetButtonType(en_CheckButton);
  91. m_btRemPass.SetParentBack(hParentDC);
  92. m_btRemPass.SetSize(67,15);
  93. m_btRemPass.m_colNormalText = RGB(0,27,47);
  94. m_btAutoLogon.Create(TEXT("自动登录"),WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX,CRect(192,212,0,0),this,IDC_AUTOLOGON);
  95. m_btAutoLogon.SetCheckImage(TEXT("QQ\\CheckBox\\checkbox_normal.png"),TEXT("QQ\\CheckBox\\checkbox_hightlight.png"),TEXT("QQ\\CheckBox\\checkbox_tick_normal.png"),TEXT("QQ\\CheckBox\\checkbox_tick_highlight.png"));
  96. m_btAutoLogon.SetButtonType(en_CheckButton);
  97. m_btAutoLogon.SetParentBack(hParentDC);
  98. m_btAutoLogon.SetSize(67,15);
  99. m_btAutoLogon.m_colNormalText = RGB(0,27,47);
  100. m_btLogon.Create(TEXT("登 陆"),WS_VISIBLE|WS_CHILD,CRect(115,252,0,0),this,IDC_LOGON);
  101. m_btLogon.SetBackImage(TEXT("\\QQ\\logon\\button_login_normal.png"),TEXT("\\QQ\\logon\\button_login_hover.png"),TEXT("\\QQ\\logon\\button_login_down.png"),TEXT("\\QQ\\logon\\button_login_normal.png"));
  102. m_btLogon.SetButtonType(en_PushButton);
  103. m_btLogon.SetParentBack(hParentDC);
  104. m_btLogon.SetSize(162,38);
  105. m_btState.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(88,211,0,0),this,IDC_STATE);
  106. m_btState.SetBackImage(NULL,TEXT("QQ\\Button\\allbtn_highlight.png"),TEXT("QQ\\Button\\allbtn_down.png"),NULL);
  107. m_btState.SetIconImage(TEXT("QQ\\Status\\imonline.png"));
  108. m_btState.SetButtonType(en_IconButton);
  109. m_btState.SetParentBack(hParentDC);
  110. m_btState.SetSize(15,15);
  111. RenderEngine->AddFont(TEXT("微软雅黑"),13,false,false,false);
  112. m_ComAccount.SetWindowPos(NULL,113,145,188,100,SWP_DRAWFRAME);
  113. m_ComAccount.SetFont(CFont::FromHandle(RenderEngine->GetEndFont()));
  114. m_ComAccount.SetBgNormalPic(TEXT("QQ\\ComboBox\\frameBorderEffect_normalDraw.png"), CRect(3,3,3,3));
  115. m_ComAccount.SetBgHotPic(TEXT("QQ\\ComboBox\\frameBorderEffect_mouseDownDraw.png"), CRect(3,3,3,3));
  116. m_ComAccount.SetArrowNormalPic(TEXT("QQ\\ComboBox\\login_inputbtn_normal.png"));
  117. m_ComAccount.SetArrowHotPic(TEXT("QQ\\ComboBox\\login_inputbtn_highlight.png"));
  118. m_ComAccount.SetArrowPushedPic(TEXT("QQ\\ComboBox\\login_inputbtn_down.png"));
  119. m_ComAccount.SetParentBack(hParentDC);
  120. m_ComAccount.SetArrowWidth(23);
  121. m_ComAccount.SetDefaultText(TEXT("QQ号码/手机/邮箱"));
  122. m_ComAccount.SetItemHeight(-1, 24);
  123. CSkinComboBox_ListBox *pListBox = m_ComAccount.GetListBoxWnd();
  124. if ( pListBox != NULL )
  125. {
  126. pListBox->SetFrameColor(RGB(55,141,192));
  127. }
  128. m_EtPassWord.SetBackNormalImage(TEXT("QQ\\Edit\\frameBorderEffect_normalDraw.png"), CRect(3,3,3,3));
  129. m_EtPassWord.SetBackHotImage(TEXT("QQ\\Edit\\frameBorderEffect_mouseDownDraw.png"), CRect(3,3,3,3));
  130. m_EtPassWord.SetIconImage(TEXT("QQ\\Edit\\keyboard.png"));
  131. m_EtPassWord.SetPasswordChar(0x25CF);
  132. m_EtPassWord.SetFont(CFont::FromHandle(RenderEngine->GetEndFont()));
  133. m_EtPassWord.SetClientPoint(CPoint(3,3));
  134. m_EtPassWord.SetDefaultText(TEXT("密码"));
  135. m_EtPassWord.SetWindowPos(NULL,113,178,188,26,SWP_NOCOPYBITS);
  136. m_ComAccount.SetFocus();
  137. SetWindowPos(&wndTopMost,0,0,nWidth,nHeight,SWP_NOMOVE);
  138. CRgn rgn;
  139. rgn.CreateRoundRectRgn(0,0,nWidth,nHeight,8,8);
  140. SetWindowRgn(rgn,TRUE);
  141. return TRUE; // return TRUE unless you set the focus to a control
  142. // 异常: OCX 属性页应返回 FALSE
  143. }
  144. void CLogonDlg::OnDestroy()
  145. {
  146. __super::OnDestroy();
  147. RenderEngine->RemoveImage(m_pImageBack);
  148. RenderEngine->RemoveImage(m_pImageFace);
  149. RenderEngine->RemoveImage(m_pImageLogo);
  150. RenderEngine->RemoveImage(m_pImageShadow);
  151. }
  152. void CLogonDlg::DrawClientArea( CDC*pDC,int nWidth,int nHeight )
  153. {
  154. m_pImageBack->DrawImage(pDC,0,0,nWidth-1,nHeight-1);
  155. m_pImageLogo->DrawImage(pDC,5,5);
  156. if ( m_bLogoning )
  157. {
  158. m_pImageShadow->DrawImage(pDC,(nWidth-m_pImageShadow->GetWidth())/2,143);
  159. m_pImageFace->DrawImage(pDC,(nWidth-m_pImageShadow->GetWidth())/2+2,147,80,80);
  160. m_GifLogon.DrawImageFrame(pDC,2,240,m_nFrameIndex);
  161. }
  162. else
  163. {
  164. m_pImageShadow->DrawImage(pDC,20,143);
  165. m_pImageFace->DrawImage(pDC,22,147,76,76);
  166. }
  167. }
  168. void CLogonDlg::OnLButtonDown(UINT nFlags, CPoint point)
  169. {
  170. PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
  171. CSkinDialog::OnLButtonDown(nFlags, point);
  172. }
  173. BOOL CLogonDlg::OnCommand( WPARAM wParam, LPARAM lParam )
  174. {
  175. switch ( LOWORD(wParam) )
  176. {
  177. case IDC_CLOSE:
  178. {
  179. OnCancel();
  180. AfxGetMainWnd()->PostMessage(WM_CLOSE);
  181. }
  182. break;
  183. case IDC_MIN:
  184. {
  185. ShowWindow(SW_MINIMIZE);
  186. break;
  187. }
  188. case IDC_LOGON:
  189. {
  190. if ( m_bLogoning )
  191. {
  192. m_btLogon.SetWindowText(TEXT("登 陆"));
  193. KillTimer(IDI_LOGON_STATE);
  194. m_bLogoning = false;
  195. ShowControl(SW_SHOW);
  196. }
  197. else
  198. {
  199. m_btLogon.SetWindowText(TEXT("取 消"));
  200. SetTimer(IDI_LOGON_STATE,30,NULL);
  201. m_bLogoning = true;
  202. ShowControl(SW_HIDE);
  203. }
  204. Invalidate(FALSE);
  205. break;
  206. }
  207. case IDC_AUTOLOGON:
  208. {
  209. if ( IsDlgButtonChecked(IDC_REMPASS) == BST_UNCHECKED )
  210. {
  211. CheckDlgButton(IDC_REMPASS,BST_CHECKED);
  212. }
  213. break;
  214. }
  215. case IDC_REMPASS:
  216. {
  217. CheckDlgButton(IDC_AUTOLOGON,BST_UNCHECKED);
  218. break;
  219. }
  220. case IDC_APPLYACCOUNT:
  221. {
  222. OpenLink(TEXT("http://url.cn/KPQn6Q"));
  223. break;
  224. }
  225. case IDC_FINDACCOUNT:
  226. {
  227. OpenLink(TEXT("https://aq.qq.com/cn2/findpsw/pc/pc_find_pwd_input_account"));
  228. break;
  229. }
  230. case IDC_STATE:
  231. {
  232. CSkinMenu StateMenu;
  233. StateMenu.CreatePopupMenu();
  234. StateMenu.AppendMenu(4000,TEXT("我在线上"),TEXT("QQ\\Status\\imonline.png"));
  235. StateMenu.AppendMenu(4001,TEXT("Q我吧"),TEXT("QQ\\Status\\Qme.png"));
  236. StateMenu.AppendSeparator();
  237. StateMenu.AppendMenu(4002,TEXT("离开"),TEXT("QQ\\Status\\away.png"));
  238. StateMenu.AppendMenu(4003,TEXT("忙碌"),TEXT("QQ\\Status\\busy.png"));
  239. StateMenu.AppendMenu(4004,TEXT("请勿打扰"),TEXT("QQ\\Status\\mute.png"));
  240. StateMenu.AppendSeparator();
  241. StateMenu.AppendMenu(4005,TEXT("隐身"),TEXT("QQ\\Status\\invisible.png"));
  242. StateMenu.SetMenuBarImage(TEXT("QQ\\Menu\\menu_left_bg.png"),&CRect(2,2,2,2));
  243. StateMenu.SetMenuBackImage(TEXT("QQ\\Menu\\menu_right_bg.png"),&CRect(2,2,2,2));
  244. StateMenu.SetMenuHovenImage(TEXT("QQ\\Menu\\menu_selected.png"),&CRect(2,2,2,2));
  245. StateMenu.SetSeparatorImage(TEXT("QQ\\Menu\\menu_separtor.png"),&CRect(2,2,2,2));
  246. CRect rcControl;
  247. m_btState.GetWindowRect(&rcControl);
  248. StateMenu.TrackPopupMenu(rcControl.left,rcControl.bottom,this);
  249. break;
  250. }
  251. //////////////////////////////////////////////////////////////////////////
  252. //菜单消息
  253. case 4000:
  254. {
  255. m_btState.SetIconImage(TEXT("QQ\\Status\\imonline.png"));
  256. m_btState.Invalidate(FALSE);
  257. break;
  258. }
  259. case 4001:
  260. {
  261. m_btState.SetIconImage(TEXT("QQ\\Status\\Qme.png"));
  262. m_btState.Invalidate(FALSE);
  263. break;
  264. }
  265. case 4002:
  266. {
  267. m_btState.SetIconImage(TEXT("QQ\\Status\\away.png"));
  268. m_btState.Invalidate(FALSE);
  269. break;
  270. }
  271. case 4003:
  272. {
  273. m_btState.SetIconImage(TEXT("QQ\\Status\\busy.png"));
  274. m_btState.Invalidate(FALSE);
  275. break;
  276. }
  277. case 4004:
  278. {
  279. m_btState.SetIconImage(TEXT("QQ\\Status\\mute.png"));
  280. m_btState.Invalidate(FALSE);
  281. break;
  282. }
  283. case 4005:
  284. {
  285. m_btState.SetIconImage(TEXT("QQ\\Status\\invisible.png"));
  286. m_btState.Invalidate(FALSE);
  287. break;
  288. }
  289. }
  290. return CSkinDialog::OnCommand(wParam, lParam);
  291. }
  292. LRESULT CLogonDlg::OnClickPass( WPARAM wParam, LPARAM lParam )
  293. {
  294. if ( wParam == IDC_EDIT_PASS )
  295. {
  296. //创建键盘
  297. if (m_PasswordKeyboard.m_hWnd==NULL)
  298. {
  299. m_PasswordKeyboard.Create(IDD_PASSWORD_KEYBOARD,this);
  300. }
  301. //显示窗口
  302. UINT uFlags=SWP_NOZORDER|SWP_NOSIZE|SWP_SHOWWINDOW;
  303. //获取位置
  304. CRect rcWindow;
  305. m_EtPassWord.GetWindowRect(&rcWindow);
  306. m_PasswordKeyboard.SetBuddy(&m_EtPassWord);
  307. m_PasswordKeyboard.m_colFrameNormal = RGB(44,173,229);
  308. m_PasswordKeyboard.SetWindowPos(NULL,rcWindow.left,rcWindow.bottom,0,0,uFlags);
  309. }
  310. return TRUE;
  311. }
  312. void CLogonDlg::LoadFlash( int nWidth, int nHeight )
  313. {
  314. TCHAR szWorkDirectory[MAX_PATH]={0};
  315. RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
  316. StrCat(szWorkDirectory,TEXT("\\QQ\\logon\\noon.swf"));
  317. m_FlashControl.Create(NULL,WS_VISIBLE|WS_VISIBLE,CRect(0,0,0,0),this,3000);
  318. m_FlashControl.Init(this);
  319. m_FlashControl.LoadMovie(0,szWorkDirectory);
  320. m_FlashControl.Play();
  321. m_FlashControl.SetWindowPos(NULL,2,3,nWidth-5,140,SWP_NOACTIVATE);
  322. }
  323. void CLogonDlg::OnDraw( CDC*pDC,int nWidth,int nHeight )
  324. {
  325. ////创建缓冲
  326. //CDC BufferDC;
  327. //CBitmap ImageBuffer;
  328. //BufferDC.CreateCompatibleDC(pDC);
  329. //ImageBuffer.CreateCompatibleBitmap(pDC,nWidth,nHeight);
  330. ////设置环境
  331. //BufferDC.SelectObject(&ImageBuffer);
  332. //if( m_pImageShadow!= NULL && m_pImageShadow->IsNull() == false )
  333. // m_pImageShadow->DrawImage(&BufferDC,0,nHeight-m_pImageShadow->GetHeight(),nWidth,m_pImageShadow->GetHeight());
  334. ////绘画界面
  335. //pDC->BitBlt(0,0,nWidth,nHeight,&BufferDC,0,0,SRCCOPY);
  336. ////清理资源
  337. //BufferDC.DeleteDC();
  338. //ImageBuffer.DeleteObject();
  339. }
  340. void CLogonDlg::OnTimer(UINT_PTR nIDEvent)
  341. {
  342. if ( nIDEvent == IDI_LOGON_STATE )
  343. {
  344. static int nTime = 0;
  345. //大约2秒后显示主窗口
  346. #ifdef _DEBUG
  347. if ( nTime++ >= 20 )
  348. #else
  349. if ( nTime++ >= 33*2 )
  350. #endif
  351. {
  352. KillTimer(IDI_LOGON_STATE);
  353. GetParent()->PostMessage(WM_USER_LOGON);
  354. m_bLogoning = false;
  355. }
  356. }
  357. //GIF动画
  358. if ( nIDEvent == IDI_GIF )
  359. {
  360. if ( ++m_nFrameIndex >= m_GifLogon.GetFrameCount() )
  361. {
  362. m_nFrameIndex = 0;
  363. }
  364. InvalidateRect(&CRect(2,240,2+m_GifLogon.GetWidth(),240+m_GifLogon.GetHeight()),FALSE);
  365. }
  366. __super::OnTimer(nIDEvent);
  367. }
  368. void CLogonDlg::ShowControl(int nCmdShow)
  369. {
  370. m_btFindPass.ShowWindow(nCmdShow);
  371. m_btApplyAcoount.ShowWindow(nCmdShow);
  372. m_btRemPass.ShowWindow(nCmdShow);
  373. m_btAutoLogon.ShowWindow(nCmdShow);
  374. m_btState.ShowWindow(nCmdShow);
  375. m_ComAccount.ShowWindow(nCmdShow);
  376. m_EtPassWord.ShowWindow(nCmdShow);
  377. if( m_PasswordKeyboard.GetSafeHwnd() )
  378. m_PasswordKeyboard.ShowWindow(nCmdShow);
  379. }
  380. BOOL CLogonDlg::OnEraseBkgnd(CDC* pDC)
  381. {
  382. return TRUE;
  383. }