AviPlayerWnd.cpp
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. // AviPlayerWnd.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "aviframes.h"
  5. #include "AviPlayerWnd.h"
  6. #include "AviPlayer.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CAviPlayerWnd
  14. IMPLEMENT_DYNAMIC(CAviPlayerWnd, CWnd)
  15. CAviPlayerWnd::CAviPlayerWnd( CAviPlayer *pAviPlayer )
  16. {
  17. m_pAviPlayer = pAviPlayer;
  18. }
  19. CAviPlayerWnd::~CAviPlayerWnd()
  20. {
  21. }
  22. BEGIN_MESSAGE_MAP(CAviPlayerWnd, CWnd)
  23. //{{AFX_MSG_MAP(CAviPlayerWnd)
  24. ON_WM_TIMER()
  25. ON_WM_CREATE()
  26. ON_WM_PAINT()
  27. //}}AFX_MSG_MAP
  28. END_MESSAGE_MAP()
  29. bool CAviPlayerWnd::Create(
  30.   CWnd * pWndParent,
  31.   UINT nDlgCtrlID, // = AFX_IDW_PANE_FIRST
  32.   CRect rc, // = CRect( 0,0,0,0 )
  33.   DWORD dwStyle, // = WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN
  34.   DWORD dwStyleEx // = 0L
  35.   )
  36. {
  37. LPCTSTR strClass =
  38. ::AfxRegisterWndClass(
  39. CS_DBLCLKS, 
  40. ::LoadCursor(NULL, IDC_ARROW),
  41. NULL,
  42. NULL
  43. );
  44. if( strClass == NULL )
  45. {
  46. ASSERT( FALSE );
  47. return false;
  48. }
  49. if( ! CreateEx(
  50. dwStyleEx,
  51. strClass,
  52. _T(""),
  53. dwStyle,
  54. rc.left, rc.top, rc.Width(), rc.Height(),
  55. pWndParent->GetSafeHwnd(),
  56. NULL,
  57. NULL
  58. )
  59. )
  60. {
  61. ASSERT( FALSE );
  62. return false;
  63. }
  64. SetDlgCtrlID( nDlgCtrlID );
  65. return true;
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // CAviPlayerWnd message handlers
  69. void CAviPlayerWnd::OnTimer(__EXT_MFC_UINT_PTR nIDEvent) 
  70. {
  71. if( nIDEvent == 1 )
  72. {
  73. if( m_pAviPlayer == NULL )
  74. return;
  75. BOOL bTempPause = m_pAviPlayer->GetTempPause();
  76. if( bTempPause ){
  77. m_nTimerStart = GetTickCount();
  78. return;
  79. }
  80. int nTimerSpeed = m_pAviPlayer->GetTimerSpeed();
  81. DWORD nCurrentTimePlayed = 0;
  82. DWORD nCurrentTimeNeeded = 0;
  83. int i = 0;
  84. do 
  85. {
  86. i++;
  87. m_pAviPlayer->NextFrame();
  88. DWORD nCurrentFrameNumber = m_pAviPlayer->GetCurrentFrameNumber();
  89. if( nCurrentFrameNumber == 0){ // first frame
  90. m_nTimerStart = GetTickCount();
  91. m_pAviPlayer->m_nFrameSkiped = 0;
  92. }
  93. nCurrentTimePlayed = nTimerSpeed * m_pAviPlayer->m_nStartFrameNumber;
  94. nCurrentTimeNeeded = GetTickCount()-m_nTimerStart;
  95. while( nCurrentTimePlayed < nCurrentTimeNeeded );
  96. m_pAviPlayer->m_nFrameSkiped += (i-1);
  97. Invalidate();
  98. return;
  99. CWnd::OnTimer(nIDEvent);
  100. }
  101. //////////////////////////////////////////////////////////////////////////
  102. int CAviPlayerWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  103. {
  104. if (CWnd::OnCreate(lpCreateStruct) == -1)
  105. return -1;
  106. return 0;
  107. }
  108. //////////////////////////////////////////////////////////////////////////
  109. void CAviPlayerWnd::OnPaint() 
  110. {
  111. CPaintDC dc(this); // device context for painting
  112. if( m_pAviPlayer == NULL )
  113. return;
  114. m_pAviPlayer->DrawFrame( dc, m_pAviPlayer->m_nFrameNumber );
  115. }
  116. //////////////////////////////////////////////////////////////////////////