DukeDlg.cpp
上传用户:do_tie
上传日期:2007-11-03
资源大小:1095k
文件大小:3k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. // DukeDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "GandyDraw.h"
  5. #include "DukeDlg.h"
  6. // CDukeDlg 对话框
  7. IMPLEMENT_DYNAMIC(CDukeDlg, CDialog)
  8. CDukeDlg::CDukeDlg(CWnd* pParent /*=NULL*/)
  9. : CDialog(CDukeDlg::IDD, pParent)
  10. , m_bStarted(false)
  11. , m_iCurFrame(0)
  12. , m_iTimesPerSecond(0)
  13. , pSlider(NULL)
  14. {
  15. }
  16. CDukeDlg::~CDukeDlg()
  17. {
  18. for (int i = 0; i < 10; i++)
  19. {
  20. delete m_pBmp[i];
  21. }
  22. }
  23. void CDukeDlg::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CDialog::DoDataExchange(pDX);
  26. }
  27. BEGIN_MESSAGE_MAP(CDukeDlg, CDialog)
  28. ON_BN_CLICKED(IDC_ANI_STARTSTOP, &CDukeDlg::OnBnClickedAniStartstop)
  29. ON_WM_TIMER()
  30. ON_WM_HSCROLL()
  31. ON_EN_CHANGE(IDC_N, &CDukeDlg::OnEnChangeN)
  32. END_MESSAGE_MAP()
  33. // CDukeDlg 消息处理程序
  34. BOOL CDukeDlg::OnInitDialog()
  35. {
  36. CDialog::OnInitDialog();
  37. pSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER_N);
  38. pSlider->SetRange(1, 100);
  39. pSlider->SetPos(m_iTimesPerSecond);
  40. SetDlgItemInt(IDC_N, m_iTimesPerSecond);
  41. for (int i = 0; i < 10; i++) {
  42. m_pBmp[i] = new CBitmap;
  43. m_pBmp[i]->LoadBitmap(IDB_BITMAP1 + i);
  44. }
  45. m_pBmp[0]->GetBitmap(&bs);
  46. return TRUE;  // return TRUE unless you set the focus to a control
  47. // 异常: OCX 属性页应返回 FALSE
  48. }
  49. void CDukeDlg::OnBnClickedAniStartstop()
  50. {
  51. if (m_bStarted) {
  52. KillTimer(1);
  53. m_bStarted = FALSE;
  54. SetDlgItemText(IDC_ANI_STARTSTOP, L"开始动画");
  55. }
  56. else {
  57. m_bStarted = TRUE;
  58. m_iCurFrame = 0;
  59. m_iTimesPerSecond = GetDlgItemInt(IDC_N);
  60. if (m_iTimesPerSecond <= 0) m_iTimesPerSecond = 1;
  61. else if (m_iTimesPerSecond > 100) m_iTimesPerSecond = 100;
  62. SetDlgItemInt(IDC_N, m_iTimesPerSecond);
  63. SetTimer(1, (UINT)(1000.0/m_iTimesPerSecond + 0.5), NULL);
  64. SetDlgItemText(IDC_ANI_STARTSTOP, L"停止动画");
  65. }
  66. }
  67. void CDukeDlg::OnTimer(UINT_PTR nIDEvent)
  68. {
  69. CDC *pDC = GetDlgItem(IDC_ANI)->GetDC();
  70. CDC dc;
  71. dc.CreateCompatibleDC(pDC);
  72. dc.SelectObject(m_pBmp[m_iCurFrame]);
  73. pDC->BitBlt(0, 0, bs.bmWidth, bs.bmHeight, &dc, 0, 0, SRCCOPY);
  74. m_iCurFrame++;
  75. m_iCurFrame %= 10;
  76. CDialog::OnTimer(nIDEvent);
  77. }
  78. void CDukeDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  79. {
  80. SetDlgItemInt(IDC_N, pSlider->GetPos());
  81. CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  82. }
  83. void CDukeDlg::OnEnChangeN()
  84. {
  85. // TODO:  如果该控件是 RICHEDIT 控件,则它将不会
  86. // 发送该通知,除非重写 CDialog::OnInitDialog()
  87. // 函数并调用 CRichEditCtrl().SetEventMask(),
  88. // 同时将 ENM_CHANGE 标志“或”运算到掩码中。
  89. // TODO:  在此添加控件通知处理程序代码
  90. pSlider->SetPos(GetDlgItemInt(IDC_N));
  91. }