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

界面编程

开发平台:

Visual C++

  1. // ChildFormView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "AviFrames.h"
  5. #include "ChildFormView.h"
  6. #include "MainFrm.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. #define GetMainFrame() (DYNAMIC_DOWNCAST(CMainFrame,AfxGetMainWnd())) 
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CAviView
  15. IMPLEMENT_DYNAMIC( CAviView, CExtScrollWnd )
  16. CAviView::CAviView()
  17. {
  18. //{{AFX_DATA_INIT(CAviView)
  19. //}}AFX_DATA_INIT
  20. m_bInitComplete = false;
  21. }
  22. CAviView::~CAviView()
  23. {
  24. }
  25. BEGIN_MESSAGE_MAP( CAviView, CExtScrollWnd )
  26. //{{AFX_MSG_MAP(CAviView)
  27. ON_WM_CREATE()
  28. //}}AFX_MSG_MAP
  29. END_MESSAGE_MAP()
  30. //////////////////////////////////////////////////////////////////////////
  31. void CAviView::PostNcDestroy() 
  32. {
  33. CExtNSB < CExtScrollWnd > :: PostNcDestroy();
  34. delete this;
  35. }
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CAviView diagnostics
  38. #ifdef _DEBUG
  39. void CAviView::AssertValid() const
  40. {
  41. CExtNSB < CExtScrollWnd > :: AssertValid();
  42. }
  43. void CAviView::Dump(CDumpContext& dc) const
  44. {
  45. CExtNSB < CExtScrollWnd > :: Dump(dc);
  46. }
  47. #endif //_DEBUG
  48. void CAviView::_AdjustCornerBetweenScrollBars()
  49. {
  50. ASSERT_VALID( this );
  51. if( m_wndLabelCorner.GetSafeHwnd() == NULL )
  52. return;
  53. CRect rcCorner( 0, 0, 0, 0 );
  54. CScrollBar * pSBH = GetScrollBarCtrl( SB_HORZ );
  55. if( pSBH->GetSafeHwnd() != NULL )
  56. {
  57. CScrollBar * pSBV = GetScrollBarCtrl( SB_VERT );
  58. if( pSBV->GetSafeHwnd() != NULL )
  59. {
  60. if( ( pSBH->GetStyle() & WS_VISIBLE ) != 0
  61. && ( pSBV->GetStyle() & WS_VISIBLE ) != 0
  62. )
  63. {
  64. CRect rcSBH, rcSBV;
  65. pSBH->GetWindowRect( &rcSBH );
  66. pSBV->GetWindowRect( &rcSBV );
  67. rcCorner.left = rcSBV.left;
  68. rcCorner.right = rcSBV.right;
  69. rcCorner.top = rcSBH.top;
  70. rcCorner.bottom = rcSBH.bottom;
  71. ScreenToClient( &rcCorner );
  72. }
  73. }
  74. }
  75. UINT nSWPF = SWP_NOOWNERZORDER | ( rcCorner.IsRectEmpty() ? SWP_HIDEWINDOW : SWP_SHOWWINDOW ) ;
  76. m_wndLabelCorner.SetWindowPos( pSBH, rcCorner.left, rcCorner.top, rcCorner.Width(), rcCorner.Height(), nSWPF );
  77. }
  78. bool CAviView::Create(
  79. CWnd * pWndParent,
  80. UINT nDlgCtrlID, // = AFX_IDW_PANE_FIRST
  81. CRect rc, // = CRect( 0,0,0,0 )
  82. DWORD dwStyle, // = WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
  83. DWORD dwStyleEx // = 0L
  84. )
  85. {
  86. // dwStyleEx |= WS_EX_CLIENTEDGE;
  87. LPCTSTR strClass =
  88. ::AfxRegisterWndClass(
  89. CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 
  90. ::LoadCursor(NULL, IDC_ARROW),
  91. NULL,
  92. NULL
  93. );
  94. if( strClass == NULL )
  95. {
  96. ASSERT( FALSE );
  97. return false;
  98. }
  99. if( ! CreateEx(
  100. dwStyleEx,
  101. strClass,
  102. _T(""),
  103. dwStyle,
  104. rc.left, rc.top, rc.Width(), rc.Height(),
  105. pWndParent->GetSafeHwnd(),
  106. NULL,
  107. NULL
  108. )
  109. )
  110. {
  111. ASSERT( FALSE );
  112. return false;
  113. }
  114. SetDlgCtrlID( nDlgCtrlID );
  115. return true;
  116. }
  117. //////////////////////////////////////////////////////////////////////////
  118. int CAviView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  119. {
  120. if( CExtNSB < CExtScrollWnd > :: OnCreate( lpCreateStruct ) == -1 )
  121. return -1;
  122. if( ! m_wndLabelCorner.Create( _T(""), WS_CHILD|WS_CLIPSIBLINGS, CRect(0,0,0,0), this ) )
  123. return -1;
  124. m_bInitComplete = true;
  125. return 0;
  126. }
  127. /////////////////////////////////////////////////////////////////////////////
  128. // CAviView message handlers
  129. //////////////////////////////////////////////////////////////////////////
  130. CSize CAviView::OnSwGetTotalSize() const
  131. {
  132. if( GetMainFrame()->m_pAviPlayer != NULL )
  133. return GetMainFrame()->m_pAviPlayer->GetAviRenderSize();
  134. return CSize(0,0);
  135. }
  136. //////////////////////////////////////////////////////////////////////////
  137. bool CAviView::OnSwDoScrollBy(
  138. CSize sizeScroll,
  139. bool bDoScroll // = true
  140. )
  141. {
  142. CExtNSB < CExtScrollWnd > :: OnSwDoScrollBy( sizeScroll, bDoScroll );
  143. if(!GetMainFrame()->m_pAviPlayer)
  144. return true;
  145. LONG lPosHorz = ScrollPos32Get( SB_HORZ );
  146. LONG lPosVert = ScrollPos32Get( SB_VERT );
  147. CSize szAvi = GetMainFrame()->m_pAviPlayer->GetAviRenderSize();
  148. GetMainFrame()->m_pAviPlayer->SetPlayerWindowPos(
  149. -lPosHorz,
  150. -lPosVert,
  151. szAvi.cx,
  152. szAvi.cy
  153. );
  154. _AdjustCornerBetweenScrollBars();
  155. return true;
  156. }
  157. //////////////////////////////////////////////////////////////////////////
  158. CRect CAviView::OnSwRecalcLayout(
  159.    bool bDoLayout,
  160.    LPCRECT pRectClientSrc )
  161. {
  162. CRect rc = CExtNSB < CExtScrollWnd > :: OnSwRecalcLayout( bDoLayout, pRectClientSrc ); 
  163. if( ! bDoLayout )
  164. return rc;
  165. if( ! GetMainFrame()->m_pAviPlayer )
  166. return rc;
  167. LONG lPosHorz = ScrollPos32Get( SB_HORZ );
  168. LONG lPosVert = ScrollPos32Get( SB_VERT );
  169. CSize szAvi = GetMainFrame()->m_pAviPlayer->GetAviRenderSize();
  170. GetMainFrame()->m_pAviPlayer->SetPlayerWindowPos(
  171. -lPosHorz,
  172. -lPosVert,
  173. szAvi.cx,
  174. szAvi.cy
  175. );
  176. _AdjustCornerBetweenScrollBars();
  177. return rc;
  178. }