📄 playwnd.cpp
字号:
// PlayWnd.cpp : implementation file
//
#include "stdafx.h"
#include "netsdkdemo.h"
#include "PlayWnd.h"
#include "netsdkdemodlg.h"
#include "ScreenPannel.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPlayWnd dialog
CPlayWnd::CPlayWnd()
:m_nWndID(0)
{
InitializeCriticalSection(&m_cs);
memset(&m_splitInfo, 0, sizeof(m_splitInfo));
m_nPreSplit = 0;
//{{AFX_DATA_INIT(CPlayWnd)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
BEGIN_MESSAGE_MAP(CPlayWnd, CWnd)
//{{AFX_MSG_MAP(CPlayWnd)
ON_WM_ERASEBKGND()
ON_WM_CREATE()
ON_WM_CONTEXTMENU()
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(VIDEO_MENU_BASE, VIDEO_MENU_END, OnVideoMenu)
ON_MESSAGE(VIDEO_REPAINT, OnRepaintWnd)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlayWnd message handlers
BOOL CPlayWnd::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rt;
GetClientRect(&rt);
CBrush br;
br.CreateSolidBrush(VIDEO_BACK_COLOR);
pDC->FillRect(&rt,&br);
return TRUE;
return CWnd::OnEraseBkgnd(pDC);
}
LRESULT CPlayWnd::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
CScreenPannel *pContainer = (CScreenPannel *)GetParent();
if(pContainer)
{
switch(message)
{
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
pContainer->SetActivePage(this);
{
CNetSDKDemoDlg * pMainWnd = (CNetSDKDemoDlg *)(AfxGetMainWnd());
if (pMainWnd)
{
pMainWnd->SetCurWindId(m_nWndID);
pMainWnd->UpdateCurScreenInfo();
}
}
break;
case WM_LBUTTONDBLCLK:
{
CNetSDKDemoDlg * pMainWnd = (CNetSDKDemoDlg *)(AfxGetMainWnd());
BOOL bMulti = pContainer->GetMultiScreen();
// int nCnt = pContainer->GetCount();
pContainer->SetMultiScreen(!bMulti);
if (TRUE == bMulti)
{
m_nPreSplit = pMainWnd->GetSplit();
pMainWnd->SetSplit(SPLIT1);
}
else
{
pMainWnd->SetSplit(m_nPreSplit);
}
}
break;
default:
break;
}
}
return CWnd::DefWindowProc(message, wParam, lParam);
}
void CPlayWnd::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CScreenPannel *pContainer = (CScreenPannel *)GetParent();
pContainer->SetActivePage(this);
// CContainerWnd *pContainer = (CContainerWnd *)GetParent();
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING | pContainer->GetFullScreen() ? MF_CHECKED : MF_UNCHECKED, VIDEO_MENU_FULLSCREEN, NAME_MENU_FULLSCREEN);
menu.AppendMenu(MF_STRING | pContainer->GetMultiScreen() ? MF_CHECKED : MF_UNCHECKED, VIDEO_MENU_MULTISCREEN, NAME_MENU_MULTISCREEN);
menu.AppendMenu(MF_STRING | pContainer->GetAutoAdjustPos() ? MF_CHECKED : MF_UNCHECKED, VIDEO_MENU_AUTOADJUST, NAME_MENU_AUTOADJUST);
TrackPopupMenu(
menu.m_hMenu,
TPM_LEFTALIGN,
point.x,
point.y,
0,
m_hWnd,
NULL);
}
void CPlayWnd::OnVideoMenu(UINT nID)
{
CScreenPannel *pContainer = (CScreenPannel *)GetParent();
switch(nID)
{
case VIDEO_MENU_FULLSCREEN:
pContainer->SetFullScreen(!pContainer->GetFullScreen());
break;
case VIDEO_MENU_MULTISCREEN:
{
CNetSDKDemoDlg * pMainWnd = (CNetSDKDemoDlg *)(AfxGetMainWnd());
BOOL bMulti = pContainer->GetMultiScreen();
// int nCnt = pContainer->GetCount();
pContainer->SetMultiScreen(!bMulti);
if (TRUE == bMulti)
{
m_nPreSplit = pMainWnd->GetSplit();
pMainWnd->SetSplit(SPLIT1);
}
else
{
pMainWnd->SetSplit(m_nPreSplit);
}
// pContainer->SetMultiScreen(!pContainer->GetMultiScreen());
break;
}
case VIDEO_MENU_AUTOADJUST:
pContainer->SetAutoAdjustPos(!pContainer->GetAutoAdjustPos());
break;
case VIDEO_MENU_PRINTSCREEN:
break;
case VIDEO_MENU_RECORDVIDEO:
break;
case VIDEO_MENU_EXITDECODE:
//pContainer->SetFullScreen(FALSE);
break;
default:
break;
}
}
//void CPlayWnd::OnLButtonDblClk(UINT nFlags, CPoint point)
//{
// if (!m_bFullScreen)
// {
// int cx=GetSystemMetrics(SM_CXSCREEN);
// int cy=GetSystemMetrics(SM_CYSCREEN);
//
// //保存位置信息
// GetWindowPlacement(&m_tempPlacement);
// if (!m_bIndependent)
// {
// //修改风格
// ModifyStyle(WS_CHILD, WS_POPUP);
// //修改父窗口
// m_tempParent = SetParent(NULL);
// m_tempParent->ShowWindow(SW_HIDE);
// }
//
// MoveWindow(0,0,cx,cy);
// m_bFullScreen = TRUE;
// }
// else
// {
// if (!m_bIndependent)
// {
// //还原父窗口
// m_tempParent->ShowWindow(SW_SHOW);
// SetParent(m_tempParent);
// //还原风格
// ModifyStyle(WS_POPUP, WS_CHILD);
// }
// //还原位置
// SetWindowPlacement(&m_tempPlacement);
// m_bFullScreen = FALSE;
// }
//
// CDialog::OnLButtonDblClk(nFlags, point);
//}
//
//BOOL CPlayWnd::OnInitDialog()
//{
// CDialog::OnInitDialog();
//
// m_bFullScreen = FALSE;
// m_tempParent = 0;
// m_nWndID = 0;
// m_bIndependent = FALSE;
//
// return TRUE; // return TRUE unless you set the focus to a control
// // EXCEPTION: OCX Property Pages should return FALSE
//}
//
//void CPlayWnd::OnLButtonDown(UINT nFlags, CPoint point)
//{
// if (!m_bFullScreen && !m_bIndependent)
// {
// ((CNetSDKDemoDlg *)AfxGetMainWnd())->ReceivePlayWndID(m_nWndID);
// CDialog::OnLButtonDown(nFlags, point);
// }
//}
//
//void CPlayWnd::Independent()
//{
// m_tempParent = SetParent(NULL);
// ModifyStyle(WS_CHILD, WS_POPUP);
// m_bIndependent = TRUE;
//}
//
//void CPlayWnd::Dependent()
//{
// SetParent(m_tempParent);
// ModifyStyle(WS_POPUP, WS_CHILD);
// m_bIndependent = FALSE;
//}
//
//BOOL PreTranslateMessage(MSG* pMsg)
//{
// // TODO: Add your specialized code here and/or call the base class
// if (WM_KEYDOWN == pMsg->message)
// {
// if (VK_ESCAPE == pMsg->wParam || VK_RETURN == pMsg->wParam)
// {
// if (1/*m_bIndependent*/)
// {
// ((CNetSDKDemoDlg *)AfxGetMainWnd())->ReturnOrignalSplit();
// m_bFullScreen = FALSE; //以防全屏状态下出现混乱
// }
// else if (m_bFullScreen)
// {
// OnLButtonDblClk(0, 0);
// }
// }
// return TRUE;
// }
// return CDialog::PreTranslateMessage(pMsg);
//}
BOOL CPlayWnd::GetSplitInfo(SplitInfoNode* info)
{
if (!info)
{
return FALSE;
}
EnterCriticalSection(&m_cs);
memcpy(info, &m_splitInfo, sizeof(SplitInfoNode));
LeaveCriticalSection(&m_cs);
return TRUE;
}
BOOL CPlayWnd::SetSplitInfo(SplitInfoNode* info)
{
if (!info)
{
return FALSE;
}
EnterCriticalSection(&m_cs);
memcpy(&m_splitInfo, info, sizeof(SplitInfoNode));
LeaveCriticalSection(&m_cs);
return TRUE;
}
void CPlayWnd::SetSplitType(SplitType type)
{
EnterCriticalSection(&m_cs);
m_splitInfo.Type = type;
LeaveCriticalSection(&m_cs);
}
void CPlayWnd::SetSplitHandle(DWORD dwHandle)
{
EnterCriticalSection(&m_cs);
m_splitInfo.iHandle = dwHandle;
LeaveCriticalSection(&m_cs);
}
void CPlayWnd::SetSplitParam(void *Param)
{
EnterCriticalSection(&m_cs);
m_splitInfo.Param = Param;
LeaveCriticalSection(&m_cs);
}
void CPlayWnd::SetSplitCBFlag_Real(int nFlag)
{
EnterCriticalSection(&m_cs);
m_splitInfo.isSaveData = nFlag;
LeaveCriticalSection(&m_cs);
}
void CPlayWnd::SetSplitCBFile_Raw(FILE *file)
{
EnterCriticalSection(&m_cs);
m_splitInfo.SavecbFileRaw = file;
LeaveCriticalSection(&m_cs);
}
void CPlayWnd::SetSplitCBFile_Std(FILE *file)
{
EnterCriticalSection(&m_cs);
m_splitInfo.SavecbFileStd = file;
LeaveCriticalSection(&m_cs);
}
void CPlayWnd::SetSplitCBFile_Pcm(FILE *file)
{
EnterCriticalSection(&m_cs);
m_splitInfo.SavecbFilePcm = file;
LeaveCriticalSection(&m_cs);
}
void CPlayWnd::SetSplitCBFile_Yuv(FILE *file)
{
EnterCriticalSection(&m_cs);
m_splitInfo.SavecbFileYUV = file;
LeaveCriticalSection(&m_cs);
}
LRESULT CPlayWnd::OnRepaintWnd(WPARAM wParam, LPARAM lParam)
{
Invalidate();
return 0;
}
BOOL CPlayWnd::DestroyWindow()
{
DeleteCriticalSection(&m_cs);
return CWnd::DestroyWindow();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -