AnimateStatic.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // AnimateStatic.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Animation.h"
  5. #include "AnimateStatic.h"
  6. #include <math.h>
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CAnimateStatic
  14. CAnimateStatic::CAnimateStatic()
  15. : m_nAnimationType(xtWindowsDefault)
  16. , m_nAnimationDelay(500)
  17. , m_nAnimationSteps(10)
  18. {
  19. m_bAnimationFinished = FALSE;
  20. }
  21. CAnimateStatic::~CAnimateStatic()
  22. {
  23. }
  24. BEGIN_MESSAGE_MAP(CAnimateStatic, CStatic)
  25. //{{AFX_MSG_MAP(CAnimateStatic)
  26. ON_WM_PAINT()
  27. //}}AFX_MSG_MAP
  28. END_MESSAGE_MAP()
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CAnimateStatic message handlers
  31. void CAnimateStatic::OnDraw(CDC* pDC)
  32. {
  33. CDC dcCompatible;
  34. dcCompatible.CreateCompatibleDC(pDC);
  35. CXTPBitmapDC bitmap(&dcCompatible, &m_bmpGear);
  36. BITMAP info;
  37. m_bmpGear.GetObject(sizeof(info), &info);
  38. pDC->BitBlt(0, 0, info.bmWidth, info.bmHeight, &dcCompatible, 0,0, SRCCOPY);
  39. pDC->Draw3dRect(0, 0, info.bmWidth, info.bmHeight, 0,0);
  40. }
  41. void CAnimateStatic::OnPaint() 
  42. {
  43. CPaintDC dc(this);
  44. CXTPClientRect rClient(this);
  45. CXTMemDC memDC(&dc, rClient, GetXtremeColor(COLOR_WINDOW));
  46. OnDraw(&memDC);
  47. if (!m_bAnimationFinished)
  48. {
  49. // create animation device context.
  50. CXTAnimationMemDC animationDC(&dc, rClient, GetXtremeColor(COLOR_WINDOW));
  51. OnDraw(&animationDC);
  52. // set animation attributes.
  53. animationDC.Animate(m_nAnimationType, m_nAnimationSteps, m_nAnimationDelay);
  54. m_bAnimationFinished = TRUE;
  55. }
  56. }
  57. void CAnimateStatic::PreSubclassWindow() 
  58. {
  59. CStatic::PreSubclassWindow();
  60. // add our custom animation handler.
  61. CXTAnimationMemDC::SetCustomAnimation(CustomAnimation);
  62. m_bmpGear.LoadBitmap(IDB_CODEJOCKGEAR);
  63. }
  64. void AFX_CDECL CAnimateStatic::CustomAnimation(CRect rc, CDC* pDestDC, CDC* pSrcDC, int nType, int nSteps, int nAnimationTime)
  65. {
  66. switch(nType) 
  67. {
  68. case animateNoise: 
  69. {
  70. int nCount = (nAnimationTime / 100) * rc.Width() * rc.Height() / 2;
  71. for (int j = 0; j < nCount; j++)
  72. {
  73. CPoint pt(rand() % rc.Width(), rand() % rc.Height());
  74. pDestDC->SetPixel(pt, pSrcDC->GetPixel(pt));
  75. }
  76. }
  77. break;
  78. case animateStretch: 
  79. {
  80. for (int i = 0; i < rc.Height(); 
  81. i += (1 + (rc.Height() / nSteps)))
  82. {
  83. pDestDC->StretchBlt(rc.left, rc.top, rc.Width(), i, pSrcDC, 
  84. 0, 0, rc.Width(), rc.Height(), SRCCOPY);
  85. Sleep(nAnimationTime / nSteps);
  86. }
  87. }
  88. break;
  89. case animateCircles: 
  90. {
  91. CXTMemDC backDC(pDestDC, rc, (COLORREF)-1L);
  92. backDC.FromDC();  // copy image from screen
  93. const int nDiameter =  16;
  94. for (int i = 0; i < nSteps; i++)
  95. {
  96. double dRadius = (double)nDiameter / 1.5 * double(i+1)/ nSteps;
  97. for(int y = 0; y < rc.Height(); y++ )
  98. {
  99. int yDist = abs( y % nDiameter - nDiameter/2 );
  100. for(int x = 0; x < rc.Width(); x++ )
  101. {
  102. int xDist = abs(x % nDiameter - nDiameter/2 );
  103. if( sqrt((double)(yDist*yDist) + (xDist*xDist)) < dRadius )
  104. {
  105. backDC.SetPixel(x, y, pSrcDC->GetPixel(x, y));
  106. }
  107. }
  108. pDestDC->BitBlt(rc.left, rc.top, 
  109. rc.Width(), rc.Height(), &backDC, 
  110. 0, 0, SRCCOPY);
  111. Sleep(nAnimationTime / nSteps);
  112. }
  113. }
  114. break;
  115. default:
  116. CXTAnimationMemDC::DefaultAnimation(rc, pDestDC, pSrcDC, nType, nSteps, nAnimationTime);
  117. }
  118. }
  119. void CAnimateStatic::Animate()
  120. {
  121. m_bAnimationFinished = FALSE;
  122. ShowWindow(SW_HIDE);
  123. ShowWindow(SW_SHOW);
  124. }