PreView.cpp
上传用户:connie527
上传日期:2022-04-15
资源大小:4326k
文件大小:3k
源码类别:

行业应用

开发平台:

Visual C++

  1. // PreView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "capture.h"
  5. #include "PreView.h"
  6. #include "Panel.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CPreView
  14. #include "CaptureDlg.h"
  15. int CPreView::m_CurIndex = 0;
  16. CPreView::CPreView()
  17. :m_Selected (FALSE),m_Index(0),m_Dbled(FALSE),m_ShowImage(FALSE)
  18. , m_Stop(psPreview)
  19. {
  20. m_Bitmap.LoadBitmap(IDB_NOSIGNAL);
  21. }
  22. CPreView::~CPreView()
  23. {
  24. m_Bitmap.Detach();
  25. }
  26. BEGIN_MESSAGE_MAP(CPreView, CStatic)
  27. //{{AFX_MSG_MAP(CPreView)
  28. ON_WM_SETFOCUS()
  29. ON_WM_LBUTTONDOWN()
  30. ON_WM_SIZE()
  31. ON_WM_LBUTTONDBLCLK()
  32. ON_WM_PAINT()
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CPreView message handlers
  37. void CPreView::OnPaint() 
  38. {
  39. CPaintDC dc(this); // device context for painting
  40. CRect rc;
  41. GetClientRect(rc);
  42. if(m_Index == m_CurIndex)
  43. m_Selected = TRUE;
  44. else
  45. m_Selected = FALSE;
  46. if(m_Selected)
  47. {
  48. CPen pen(PS_SOLID,2,RGB(0,255,0));
  49. dc.SelectObject(&pen);
  50. dc.Rectangle(rc);
  51. }
  52. else
  53. {
  54. CPen pen(PS_SOLID,2,RGB(55,55,55));
  55. dc.SelectObject(&pen);
  56. dc.Rectangle(rc);
  57. }
  58. if(m_ShowImage) //有视频信号
  59. {
  60. CBrush brush (RGB(255,0,255));
  61. dc.SelectObject(&brush);
  62. rc.DeflateRect(2,2,2,2);
  63. dc.FillRect(rc,&brush);
  64. }
  65. else //无视频信号
  66. {
  67. CDC memDC;
  68. memDC.CreateCompatibleDC(&dc);
  69. memDC.SelectObject(&m_Bitmap);
  70. BITMAP bInfo;
  71. m_Bitmap.GetBitmap(&bInfo);
  72. int x = bInfo.bmWidth;
  73. int y = bInfo.bmHeight;
  74. dc.StretchBlt(1,1,rc.Width()-2,rc.Height()-2,&memDC,1,1,x,y,SRCCOPY);
  75. memDC.DeleteDC();
  76. }
  77. // Do not call CStatic::OnPaint() for painting messages
  78. }
  79. void CPreView::OnSetFocus(CWnd* pOldWnd) 
  80. {
  81. CStatic::OnSetFocus(pOldWnd);
  82. }
  83. void CPreView::OnLButtonDown(UINT nFlags, CPoint point) 
  84. {
  85. int preIndex = m_CurIndex ;
  86. if(m_CurIndex==-1)
  87. preIndex = m_Index;
  88. m_CurIndex = m_Index;
  89. ((CPanel*)GetParent())->RefreshWnd(preIndex,m_Index);
  90. CStatic::OnLButtonDown(nFlags, point);
  91. }
  92. void CPreView::OnSize(UINT nType, int cx, int cy) 
  93. {
  94. if(m_ShowImage)
  95. {
  96. if(m_Stop==psPreview)
  97. {
  98. VCAUpdateOverlayWnd(GetParent()->m_hWnd);
  99. VCAUpdateVideoPreview(m_Index,m_hWnd);
  100. }
  101. }
  102. CStatic::OnSize(nType, cx, cy);
  103. }
  104. void CPreView::OnLButtonDblClk(UINT nFlags, CPoint point) 
  105. {
  106. m_CurIndex = m_Index;
  107. if(m_Stop!=psPreview)  //在停止预览时禁止双击
  108. return;
  109. m_Dbled = ! m_Dbled;
  110. //记录原始区域大小
  111. CRect rc,prc;
  112. GetClientRect(rc);
  113. this->MapWindowPoints(GetParent(),rc);
  114. GetParent()->GetClientRect(prc);
  115. int div = ((CPanel*)GetParent())->m_Div;
  116. prc.DeflateRect(div,div,div,div);
  117. ((CPanel*)GetParent())->OnSize(0,0,0);
  118. if(m_Dbled)
  119. {
  120. ((CPanel*)GetParent())->ShowOnly(m_Index);
  121. SetWindowPos(&wndTop,prc.left,prc.top,prc.Width(),prc.Height(),SWP_SHOWWINDOW);
  122. if (m_ShowImage )
  123. {
  124. VCAUpdateOverlayWnd(GetParent()->m_hWnd);
  125. VCAUpdateVideoPreview(m_Index,m_hWnd);
  126. Invalidate();
  127. }
  128. }
  129. else
  130. {
  131. ((CPanel*)GetParent())->ShowAll();
  132. if(m_ShowImage)
  133. {
  134. VCAUpdateOverlayWnd(GetParent()->m_hWnd);
  135. ((CPanel*)GetParent())->UpdateAllPreView();
  136.  VCAUpdateVideoPreview(m_Index,m_hWnd);
  137. Invalidate();
  138. }
  139. }
  140. CStatic::OnLButtonDblClk(nFlags, point);
  141. }