⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playwnd.cpp

📁 它是一个可以实时交互的嵌入式软件系统
💻 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 + -