📄 panel.cpp
字号:
// Panel.cpp : implementation file
//
#include "stdafx.h"
#include "capture.h"
#include "Panel.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <math.h>
/////////////////////////////////////////////////////////////////////////////
// CPanel dialog
CPanel::CPanel(CWnd* pParent /*=NULL*/)
: CDialog(CPanel::IDD, pParent)
{
//{{AFX_DATA_INIT(CPanel)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_Num = 0;
m_Div = 2;
m_UnitNum = 0;
}
void CPanel::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPanel)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPanel, CDialog)
//{{AFX_MSG_MAP(CPanel)
ON_WM_SIZE()
ON_WM_CTLCOLOR()
ON_WM_WINDOWPOSCHANGED()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPanel message handlers
void CPanel::OnOK()
{
}
CPanel::~CPanel()
{
if (m_Num>0)
delete [] m_pList;
}
BOOL CPanel::CreatePreWnd(UINT uNum)
{
if (uNum==0)
return FALSE;
m_UnitNum = uNum;
m_Num = pow(uNum,2);
m_pList = new CPreView[m_Num ];
CRect rc;
GetClientRect(rc);
//预览窗口的宽度
int width = (rc.Width()-(uNum+1)*m_Div)/uNum;
//预览窗口的高度
int height = (rc.Height()-(uNum+1)*m_Div)/uNum;
for (int i =0; i<m_Num; i++)
{
int row = i/uNum+1;
int col = i % uNum+1;
int x = col*m_Div+(col-1)*width;
int y = row*m_Div+(row-1)*height;
CRect rect(x,y,x+width,y+height);
m_pList[i].Create("",WS_CHILD|WS_VISIBLE|SS_BLACKFRAME|SS_NOTIFY,rect,this);
m_pList[i].m_Index = i;
}
OnSize(0,0,0);
return TRUE;
}
void CPanel::RefreshWnd(int preIndex,int curIndex)
{
m_pList[preIndex].Invalidate();
m_pList[curIndex].Invalidate();
}
void CPanel::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (m_Num>0) //创建了预览窗口
{
CRect rc;
GetClientRect(rc);
m_PreRC = rc;
m_PreRC.DeflateRect(m_Div,m_Div,m_Div,m_Div);
//预览窗口的宽度
int width = (rc.Width()-(m_UnitNum+1)*m_Div)/m_UnitNum;
//预览窗口的高度
int height = (rc.Height()-(m_UnitNum+1)*m_Div)/m_UnitNum;
for (int i =0; i<m_Num; i++)
{
int row = i / m_UnitNum+1;
int col = i % m_UnitNum+1;
int x = col*m_Div+(col-1)*width;
int y = row*m_Div+(row-1)*height;
CRect rect(x,y,x+width,y+height);
if (m_pList[i].IsWindowVisible())
{
if (!m_pList[i].m_Dbled)
{
m_pList[i].MoveWindow(rect);
m_pList[i].Invalidate();
}
else
{
m_pList[i].MoveWindow(m_PreRC);
m_pList[i].Invalidate();
}
}
}
}
}
void CPanel::ShowOnly(int Index)
{
for (int i =0; i<m_Num; i++)
{
if (i==Index)
{
m_pList[i].m_Stop = psPreview;
m_pList[i].ShowWindow(SW_SHOW);
}
else
{
if (m_pList[i].m_Stop==psPreview)
m_pList[i].m_Stop = psRestore;
VCAStopVideoPreview(i);
m_pList[i].ShowWindow(SW_HIDE);
}
m_pList[i].Invalidate();
}
}
void CPanel::ShowAll()
{
for (int i =0; i<m_Num; i++)
{
if (m_pList[i].m_Stop==psRestore)
{
m_pList[i].m_Stop = psPreview;
VCAStartVideoPreview(i);
}
m_pList[i].ShowWindow(SW_SHOW);
m_pList[i].Invalidate();
}
}
HBRUSH CPanel::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_DLG )
{
CBrush br(RGB(255,0,255));
return br;
}
return hbr;
}
void CPanel::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
CDialog::OnWindowPosChanged(lpwndpos);
}
//判断是否有预览窗口被双击
int CPanel::IsDbled()
{
for (int i=0; i< m_Num; i++)
{
if (m_pList[i].m_Dbled)
return i;
}
return -1;
}
void CPanel::UpdateAllPreView()
{
for (int i = 0; i< m_Num; i++)
{
if (m_pList[i].m_ShowImage)
{
VCAUpdateVideoPreview(i,m_pList[i].m_hWnd);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -