ClrGradientPrgssCtrlDlg.cpp
上传用户:aokegd
上传日期:2009-12-14
资源大小:1276k
文件大小:5k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // ClrGradientPrgssCtrlDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ClrGradientPrgssCtrl.h"
  5. #include "ClrGradientPrgssCtrlDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. BOOL PeekAndPump();
  14. class CAboutDlg : public CDialog
  15. {
  16. public:
  17. CAboutDlg();
  18. // Dialog Data
  19. //{{AFX_DATA(CAboutDlg)
  20. enum { IDD = IDD_ABOUTBOX };
  21. //}}AFX_DATA
  22. // ClassWizard generated virtual function overrides
  23. //{{AFX_VIRTUAL(CAboutDlg)
  24. protected:
  25. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  26. //}}AFX_VIRTUAL
  27. // Implementation
  28. protected:
  29. //{{AFX_MSG(CAboutDlg)
  30. //}}AFX_MSG
  31. DECLARE_MESSAGE_MAP()
  32. };
  33. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  34. {
  35. //{{AFX_DATA_INIT(CAboutDlg)
  36. //}}AFX_DATA_INIT
  37. }
  38. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialog::DoDataExchange(pDX);
  41. //{{AFX_DATA_MAP(CAboutDlg)
  42. //}}AFX_DATA_MAP
  43. }
  44. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  45. //{{AFX_MSG_MAP(CAboutDlg)
  46. // No message handlers
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CClrGradientPrgssCtrlDlg dialog
  51. CClrGradientPrgssCtrlDlg::CClrGradientPrgssCtrlDlg(CWnd* pParent /*=NULL*/)
  52. : CDialog(CClrGradientPrgssCtrlDlg::IDD, pParent)
  53. {
  54. //{{AFX_DATA_INIT(CClrGradientPrgssCtrlDlg)
  55. m_nRange = 0;
  56. m_bShowPercent = FALSE;
  57. //}}AFX_DATA_INIT
  58. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  59. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  60. }
  61. void CClrGradientPrgssCtrlDlg::DoDataExchange(CDataExchange* pDX)
  62. {
  63. CDialog::DoDataExchange(pDX);
  64. //{{AFX_DATA_MAP(CClrGradientPrgssCtrlDlg)
  65. DDX_Control(pDX, IDC_PROGRESS1, m_cProgress);
  66. DDX_Text(pDX, IDC_EDIT1, m_nRange);
  67. DDX_Check(pDX, IDC_CHECK1, m_bShowPercent);
  68. //}}AFX_DATA_MAP
  69. }
  70. BEGIN_MESSAGE_MAP(CClrGradientPrgssCtrlDlg, CDialog)
  71. //{{AFX_MSG_MAP(CClrGradientPrgssCtrlDlg)
  72. ON_WM_SYSCOMMAND()
  73. ON_WM_PAINT()
  74. ON_WM_QUERYDRAGICON()
  75. ON_BN_CLICKED(IDC_TEST, OnTest)
  76. //}}AFX_MSG_MAP
  77. END_MESSAGE_MAP()
  78. /////////////////////////////////////////////////////////////////////////////
  79. // CClrGradientPrgssCtrlDlg message handlers
  80. BOOL CClrGradientPrgssCtrlDlg::OnInitDialog()
  81. {
  82. CDialog::OnInitDialog();
  83. // Add "About..." menu item to system menu.
  84. // IDM_ABOUTBOX must be in the system command range.
  85. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  86. ASSERT(IDM_ABOUTBOX < 0xF000);
  87. CMenu* pSysMenu = GetSystemMenu(FALSE);
  88. if (pSysMenu != NULL)
  89. {
  90. CString strAboutMenu;
  91. strAboutMenu.LoadString(IDS_ABOUTBOX);
  92. if (!strAboutMenu.IsEmpty())
  93. {
  94. pSysMenu->AppendMenu(MF_SEPARATOR);
  95. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  96. }
  97. }
  98. // Set the icon for this dialog.  The framework does this automatically
  99. //  when the application's main window is not a dialog
  100. SetIcon(m_hIcon, TRUE); // Set big icon
  101. SetIcon(m_hIcon, FALSE); // Set small icon
  102. // TODO: Add extra initialization here
  103. m_clrText = m_cProgress.GetTextColor();
  104. m_clrBk = m_cProgress.GetBkColor();
  105. m_clrStart = m_cProgress.GetStartColor();
  106. m_clrEnd = m_cProgress.GetEndColor();
  107. return TRUE;  // return TRUE  unless you set the focus to a control
  108. }
  109. void CClrGradientPrgssCtrlDlg::OnSysCommand(UINT nID, LPARAM lParam)
  110. {
  111. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  112. {
  113. CAboutDlg dlgAbout;
  114. dlgAbout.DoModal();
  115. }
  116. else
  117. {
  118. CDialog::OnSysCommand(nID, lParam);
  119. }
  120. }
  121. // If you add a minimize button to your dialog, you will need the code below
  122. //  to draw the icon.  For MFC applications using the document/view model,
  123. //  this is automatically done for you by the framework.
  124. void CClrGradientPrgssCtrlDlg::OnPaint() 
  125. {
  126. if (IsIconic())
  127. {
  128. CPaintDC dc(this); // device context for painting
  129. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  130. // Center icon in client rectangle
  131. int cxIcon = GetSystemMetrics(SM_CXICON);
  132. int cyIcon = GetSystemMetrics(SM_CYICON);
  133. CRect rect;
  134. GetClientRect(&rect);
  135. int x = (rect.Width() - cxIcon + 1) / 2;
  136. int y = (rect.Height() - cyIcon + 1) / 2;
  137. // Draw the icon
  138. dc.DrawIcon(x, y, m_hIcon);
  139. }
  140. else
  141. {
  142. CDialog::OnPaint();
  143. }
  144. }
  145. // The system calls this to obtain the cursor to display while the user drags
  146. //  the minimized window.
  147. HCURSOR CClrGradientPrgssCtrlDlg::OnQueryDragIcon()
  148. {
  149. return (HCURSOR) m_hIcon;
  150. }
  151. //测试
  152. void CClrGradientPrgssCtrlDlg::OnTest() 
  153. {
  154. UpdateData(TRUE);
  155. //设置参数
  156. m_cProgress.SetRange(0, m_nRange);
  157. m_cProgress.ShowPercent(m_bShowPercent);
  158. m_cProgress.SetStartColor(m_clrStart);
  159. m_cProgress.SetEndColor(m_clrEnd);
  160. m_cProgress.SetTextColor(m_clrText);
  161. m_cProgress.SetBkColor(m_clrBk);
  162. for (int i=0; i <= m_nRange; i++)
  163. {
  164. PeekAndPump();
  165. m_cProgress.SetPos(i);
  166. }
  167. }
  168. BOOL PeekAndPump()
  169. {
  170. static MSG msg;
  171. while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) {
  172. if (!AfxGetApp()->PumpMessage()) {
  173. ::PostQuitMessage(0);
  174. return FALSE;
  175. }
  176. }
  177. return TRUE;
  178. }