SNCSetupDlg.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. // SNCSetupDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "SNCSetup.h"
  5. #include "SNCSetupDlg.h"
  6. #include "fileinfo.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #endif
  10. // CSNCSetupDlg 对话框
  11. CSNCSetupDlg::CSNCSetupDlg(CWnd* pParent /*=NULL*/)
  12. : CDialog(CSNCSetupDlg::IDD, pParent)
  13. {
  14. m_hIcon = AfxGetApp()->LoadIcon(IDI_MAINFRAME);
  15. }
  16. void CSNCSetupDlg::DoDataExchange(CDataExchange* pDX)
  17. {
  18. CDialog::DoDataExchange(pDX);
  19. DDX_Control(pDX, IDC_PROGRESS, m_progress);
  20. DDX_Control(pDX, IDC_STATIC_MAESSAGE, m_currentinfo);
  21. DDX_Control(pDX, IDC_BUTTON_CLOSE, m_buttonclose);
  22. }
  23. BEGIN_MESSAGE_MAP(CSNCSetupDlg, CDialog)
  24. ON_WM_PAINT()
  25. ON_WM_CLOSE()
  26. ON_WM_QUERYDRAGICON()
  27. ON_MESSAGE(WM_USERMSG_UINSTALL_STATE, &CSNCSetupDlg::onUserMsgUninstallState)
  28. //}}AFX_MSG_MAP
  29. ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CSNCSetupDlg::OnBnClickedButtonClose)
  30. END_MESSAGE_MAP()
  31. // CSNCSetupDlg 消息处理程序
  32. LRESULT CSNCSetupDlg::onUserMsgUninstallState(WPARAM wParam, LPARAM lParam)
  33. {
  34. if(wParam>=100)
  35. {
  36. SetSystemError(wParam);
  37. }
  38. switch(wParam)
  39. {
  40. case USER_PARAM_UNINSTALL_EXIT:
  41. SetUnInstallFinished();
  42. break;
  43. }
  44. return 0;
  45. }
  46. BOOL CSNCSetupDlg::OnInitDialog()
  47. {
  48. CDialog::OnInitDialog();
  49. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  50. // 执行此操作
  51. SetIcon(m_hIcon, TRUE); // 设置大图标
  52. SetIcon(m_hIcon, FALSE); // 设置小图标
  53. this->confirm = true;
  54. ShowWindow(SW_NORMAL);
  55. // TODO: 在此添加额外的初始化代码
  56. StartUninstall();
  57. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  58. }
  59. // 如果向对话框添加最小化按钮,则需要下面的代码
  60. // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  61. // 这将由框架自动完成。
  62. void CSNCSetupDlg::OnPaint()
  63. {
  64. if (IsIconic())
  65. {
  66. CPaintDC dc(this); // 用于绘制的设备上下文
  67. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  68. // 使图标在工作区矩形中居中
  69. int cxIcon = GetSystemMetrics(SM_CXICON);
  70. int cyIcon = GetSystemMetrics(SM_CYICON);
  71. CRect rect;
  72. GetClientRect(&rect);
  73. int x = (rect.Width() - cxIcon + 1) / 2;
  74. int y = (rect.Height() - cyIcon + 1) / 2;
  75. // 绘制图标
  76. dc.DrawIcon(x, y, m_hIcon);
  77. }
  78. else
  79. {
  80. CDialog::OnPaint();
  81. }
  82. }
  83. //当用户拖动最小化窗口时系统调用此函数取得光标
  84. //显示。
  85. HCURSOR CSNCSetupDlg::OnQueryDragIcon()
  86. {
  87. return static_cast<HCURSOR>(m_hIcon);
  88. }
  89. void CSNCSetupDlg::OnClose()
  90. {
  91. if(confirm)
  92. {
  93. if(MessageBox( _T("极速号码魔方安装程序尚未完成。确定要退出吗? "), _T("提示"),MB_ICONQUESTION | MB_YESNO) != IDYES)
  94. {
  95. return;
  96. }
  97. }
  98. SetUserAbort();
  99. this->m_threadParam.stop = true;
  100. CDialog::OnClose() ;
  101. }
  102. void CSNCSetupDlg::StartUninstall()
  103. {
  104. m_currentinfo.SetWindowTextW(_T("正在卸载..."));
  105. SetProgressToMarquee(IDC_PROGRESS);
  106. m_threadParam.hwnd = GetSafeHwnd();
  107. m_threadParam.stop = false;
  108. m_threadParam.deluserdata = this->deluserdata;
  109. m_uninstall.StartUninstall(&m_threadParam);
  110. }
  111. void CSNCSetupDlg::SetSystemError(int errCode)
  112. {
  113. CString display ;
  114. display.Format(_T("安装程序发生内部错误,错误代码%d,请与软件提供商联系。"),errCode);
  115. m_currentinfo.SetWindowTextW(display);
  116. m_progress.ShowWindow(SW_HIDE);
  117. m_buttonclose.ShowWindow(SW_SHOW);
  118. confirm = false;
  119. }
  120. void CSNCSetupDlg::SetUserAbort()
  121. {
  122. m_currentinfo.SetWindowTextW(_T("用户取消..."));
  123. confirm = false;
  124. OnOK();
  125. }
  126. void CSNCSetupDlg::SetUnInstallFinished()
  127. {
  128. m_currentinfo.SetWindowTextW(_T("卸载顺利完成!"));
  129. confirm = false;
  130. m_progress.ShowWindow(SW_HIDE);
  131. ::Sleep(1000);
  132. OnOK();
  133. }
  134. void CSNCSetupDlg::SetProgressToMarquee(int nID)
  135. {
  136. HWND hwndProgress = GetDlgItem(nID)->m_hWnd;
  137. DWORD dwStyle = ::GetWindowLong(hwndProgress, GWL_STYLE);
  138. ::SetWindowLong(hwndProgress, GWL_STYLE, dwStyle|PBS_MARQUEE);
  139. ::SendMessage(hwndProgress,(UINT) PBM_SETMARQUEE,(WPARAM) TRUE,(LPARAM)30);/**/
  140. m_progress.SetMarquee(true,20);
  141. }
  142. void CSNCSetupDlg::SetProgressNoMarquee()
  143. {
  144. HWND hwndProgress = GetDlgItem(IDC_PROGRESS)->m_hWnd;
  145. DWORD dwStyle = ::GetWindowLong(hwndProgress, GWL_STYLE);
  146. ::SetWindowLong(hwndProgress, GWL_STYLE, dwStyle&~PBS_MARQUEE);
  147. ::SendMessage(hwndProgress,(UINT) PBM_SETMARQUEE,(WPARAM) FALSE,(LPARAM)30);
  148. m_progress.SetMarquee(false,20);
  149. }
  150. void CSNCSetupDlg::OnBnClickedButtonClose()
  151. {
  152. // TODO: 在此添加控件通知处理程序代码
  153. OnOK();
  154. }