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

行业应用

开发平台:

Visual C++

  1. // Panel.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "capture.h"
  5. #include "Panel.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CPanel dialog
  13. CPanel::CPanel(CWnd* pParent /*=NULL*/)
  14. : CDialog(CPanel::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CPanel)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. m_Num = 0;
  20. m_Div = 1;
  21. m_UnitNum = 0;
  22. }
  23. void CPanel::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CDialog::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CPanel)
  27. // NOTE: the ClassWizard will add DDX and DDV calls here
  28. //}}AFX_DATA_MAP
  29. }
  30. BEGIN_MESSAGE_MAP(CPanel, CDialog)
  31. //{{AFX_MSG_MAP(CPanel)
  32. ON_WM_SIZE()
  33. ON_WM_CTLCOLOR()
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CPanel message handlers
  38. void CPanel::OnOK() 
  39. {
  40. }
  41. CPanel::~CPanel()
  42. {
  43. if (m_Num>0)
  44. delete [] m_pList;
  45. }
  46. BOOL CPanel::CreatePreWnd(UINT uNum)
  47. {
  48. if(uNum == 0)
  49. return FALSE;
  50. m_UnitNum = uNum;
  51. m_Num = pow(uNum,2);
  52. m_pList = new CPreView[m_Num];
  53. CRect rc;
  54. GetClientRect(rc);
  55. //预览窗口的宽度
  56. int width = (rc.Width() - (uNum + 1) * m_Div) / uNum;
  57. //预览窗口的高度
  58. int height = (rc.Height() - (uNum + 1) * m_Div) / uNum;
  59. for (int i =0; i<m_Num; i++)
  60. {
  61. int row = i / uNum + 1;
  62. int col = i % uNum + 1;
  63. int x   = col*m_Div + (col - 1) * width;
  64. int y   = row*m_Div + (row - 1) * height;
  65. CRect rect(x,y,x+width,y+height);
  66. m_pList[i].Create("",WS_CHILD|WS_VISIBLE|SS_BLACKFRAME|SS_NOTIFY,rect,this);
  67. m_pList[i].m_Index = i;
  68. }
  69. return TRUE;
  70. }
  71. void CPanel::RefreshWnd(int preIndex,int curIndex)
  72. {
  73. m_pList[preIndex].Invalidate();
  74. m_pList[curIndex].Invalidate();
  75. }
  76. void CPanel::OnSize(UINT nType, int cx, int cy) 
  77. {
  78. CDialog::OnSize(nType, cx, cy);
  79. if(m_Num>0) //创建了预览窗口
  80. {
  81. CRect rc;
  82. GetClientRect(rc);
  83. m_PreRC = rc;
  84. m_PreRC.DeflateRect(m_Div,m_Div,m_Div,m_Div);
  85. //预览窗口的宽度
  86. int width  = (rc.Width() - (m_UnitNum + 1) * m_Div) / m_UnitNum;
  87. //预览窗口的高度
  88. int height = (rc.Height() - (m_UnitNum + 1) * m_Div) / m_UnitNum;
  89. for(int i =0; i<m_Num; i++)
  90. {
  91. int row = i / m_UnitNum+1;
  92. int col = i % m_UnitNum+1;
  93. int x = col*m_Div+(col-1)*width;
  94. int y = row*m_Div+(row-1)*height;
  95. CRect rect(x,y,x+width,y+height);
  96. if(m_pList[i].IsWindowVisible())
  97. {
  98. if(!m_pList[i].m_Dbled)
  99. {
  100. m_pList[i].MoveWindow(rect);
  101. m_pList[i].Invalidate();
  102. }
  103. else
  104. {
  105. m_pList[i].MoveWindow(m_PreRC);
  106. m_pList[i].Invalidate();
  107. }
  108. }
  109. }
  110. }
  111. }
  112. void CPanel::ShowOnly(int Index)
  113. {
  114. for(int i=0;i<m_Num;i++)
  115. {
  116. if(i == Index)
  117. {
  118. m_pList[i].m_Stop = psPreview;
  119. m_pList[i].ShowWindow(SW_SHOW);
  120. }
  121. else
  122. {
  123. if(m_pList[i].m_Stop == psPreview)
  124. m_pList[i].m_Stop = psRestore;
  125. VCAStopVideoPreview(i);
  126. m_pList[i].ShowWindow(SW_HIDE);
  127. }
  128. m_pList[i].Invalidate();
  129. }
  130. }
  131. void CPanel::ShowAll()
  132. {
  133. for(int i=0;i<m_Num;i++)
  134. {
  135. if(m_pList[i].m_Stop == psRestore)
  136. {
  137. m_pList[i].m_Stop = psPreview;
  138. VCAStartVideoPreview(i);
  139. }
  140. m_pList[i].ShowWindow(SW_SHOW);
  141. m_pList[i].Invalidate();
  142. }
  143. }
  144. HBRUSH CPanel::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
  145. {
  146. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  147. if (nCtlColor == CTLCOLOR_DLG )
  148. {
  149. CBrush br(RGB(255,0,255));
  150. return br;
  151. }
  152. return hbr;
  153. }
  154. //判断是否有预览窗口被双击
  155. int CPanel::IsDbled()
  156. {
  157. for(int i=0;i<m_Num;i++)
  158. {
  159. if(m_pList[i].m_Dbled)
  160. return i;
  161. }
  162. return -1;
  163. }
  164. void CPanel::UpdateAllPreView()
  165. {
  166. for(int i=0;i<m_Num;i++)
  167. {
  168. if(m_pList[i].m_ShowImage)
  169. {
  170. VCAUpdateVideoPreview(i,m_pList[i].m_hWnd);
  171. }
  172. }
  173. }