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

📄 myoutput.cpp

📁 SDK DVR/DVS HIKVISION
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MyOutput.cpp : implementation file
//

#include "stdafx.h"
#include "newclient.h"
#include "MyOutput.h"
#include "CurWin.h"
#include "newclientDlg.h"
#include "DecodeCardSDK.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

WORD iActiveWndNumber = 0;
WORD m_iSubWndCreated = 0;
extern	void F_AddEvent(CString csEvent);
extern	CLIENTPARAM	ClientParam;
extern CCurwin mycurwin;
extern CMyOutput myoutput[MAXVIEWNUM];
extern	HBRUSH	hBrush;
extern BOOL g_bShareSound;
extern int g_nNetDelay;
/////////////////////////////////////////////////////////////////////////////
// CMyOutput dialog
RECT g_ShowRect3;
RECT g_MouseRect3;
void CALLBACK DrawFun3(long nPort,HDC hDc,DWORD nUser)
{
	::DrawEdge(hDc, &g_ShowRect3, BDR_SUNKENOUTER, BF_RECT);
	
	SetBkMode(hDc, TRANSPARENT);
}

void CALLBACK RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser)
{
	//TRACE("lRealHandle = %d dwUser = %d dwDataType = %d dwBufSize = %d", lRealHandle, dwUser, dwDataType, dwBufSize);
}

CMyOutput::CMyOutput(CWnd* pParent /*=NULL*/)
	: CDialog(CMyOutput::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyOutput)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_bIsAutoSave = FALSE;
}


void CMyOutput::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyOutput)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMyOutput, CDialog)
	//{{AFX_MSG_MAP(CMyOutput)
	ON_WM_CREATE()
	ON_WM_CTLCOLOR()
	ON_WM_DESTROY()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_PAINT()
	ON_WM_RBUTTONDOWN()
	ON_WM_TIMER()
	ON_COMMAND(IDC_MENU_FRONTPAGE, OnMenuFrontpage)
	ON_COMMAND(IDC_MENU_NEXTPAGE, OnMenuNextpage)
	ON_COMMAND(IDC_MENU_PAUSECYCLE, OnMenuPausecycle)
	ON_COMMAND(IDC_MENU_SOUND, OnMenuSound)
	ON_COMMAND(IDC_MENU_MULTISCREEN, OnMenuMultiscreen)
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyOutput message handlers
BOOL CMyOutput::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
//	m_iSubWndCreated = 0;
	m_dwDVRIP = 0;
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}


void CMyOutput::StartNet(PIP_INFO ipinfo)
{	
	NET_DVR_CLIENTINFO playstru;
	char ipaddress[256];
	char multiipaddress[256];
	char user[100];
	char password[100];
	WORD iServerPort;
	CString	sTemp;
	
	ZeroMemory(user,100);
	ZeroMemory(password,100);
	
	if(m_iPlayhandle != -1)
	{		
		TRACE("NET_DVR_StopRealPlay m_iPlayhandle = %d", m_iPlayhandle);
		if(g_bShareSound)
		{
			NET_DVR_CloseSoundShare(m_iPlayhandle);
		}
		if(!NET_DVR_StopRealPlay(m_iPlayhandle))
		{
			TRACE("NET_DVR_StopRealPlay failed, m_iPlayhandle = %d", m_iPlayhandle);
		}
	}
	
	m_bNeedjudge = FALSE;

	playstru.hPlayWnd = GetSafeHwnd(); 
	playstru.lChannel = ipinfo->m_iChannel;
	playstru.lLinkMode = ipinfo->m_dwProtocol;
	if(ipinfo->m_dwMultiIPvalue == 0)
		strcpy(multiipaddress,""); 
	else
		sprintf(multiipaddress,"%s",ipinfo->m_csMultiIP);
	playstru.sMultiCastIP = multiipaddress; 
	
	iServerPort = ipinfo->m_wServerport; 
	//TRACE("StartNet");
	m_iPlayhandle = NET_DVR_RealPlay(ipinfo->m_lServerID, &playstru);	
	if(m_iPlayhandle == -1)
	{
		DWORD dwErr = NET_DVR_GetLastError();
		sprintf(ipaddress,"%s",ipinfo->m_csIP);
		sTemp.Format("Start to connect IP:%s Channel%d failed. dwErr = %d",ipaddress,playstru.lChannel, dwErr);
		F_AddEvent(sTemp);
		TRACE(sTemp);
	}
	else 
	{
		//TRACE("StartNet m_iPlayhandle = %d", m_iPlayhandle);
		switch(g_nNetDelay) {
		case 0:
			NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 1);
			break;
		case 1:
			NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 6);
			break;
		case 2:
			NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 15);
			break;
		case 3:
			NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 30);
			break;
		case 4:
			NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 45);
			break;
		default:
			NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 15);
			break;
		}
//		NET_DVR_SetPlayerBufNumber(m_iPlayhandle, 15);
		NET_DVR_ThrowBFrame(m_iPlayhandle,1);
		NET_DVR_SetRealDataCallBack(m_iPlayhandle, RealDataCallBack, m_iPlayhandle);
		m_csIP = ipinfo->m_csIP;
		m_dwDVRIP = ipinfo->m_dwIPvalue;
		m_lServerID = ipinfo->m_lServerID;
		m_iChannel = playstru.lChannel;
		m_bNeedjudge = TRUE; 
	}
}

void CMyOutput::StopNet()
{ 
	if(m_iPlayhandle != -1)
	{	
		if(m_bFileSave)
			NET_DVR_StopSaveRealData(m_iPlayhandle);
		m_bFileSave = FALSE;
		if(!NET_DVR_StopRealPlay(m_iPlayhandle))
		{
			TRACE("NET_DVR_StopRealPlay failed, m_iPlayhandle = %d", m_iPlayhandle);
		}
		//TRACE("NET_DVR_StopRealPlay");
		m_bNeedjudge = FALSE;
		invateframe();
		m_iPlayhandle = -1;
		ClientParam.m_bPlaySound[m_iSubWndNumber] = FALSE;
		CNewclientDlg*  mainwnd = (CNewclientDlg*) AfxGetMainWnd();
	}
}

void CMyOutput::StartCard(PIP_INFO ipinfo)
{
	NET_DVR_CARDINFO playstru;
	char ipaddress[256];
	char multiipaddress[256];
	char user[100];
	char password[100];
	WORD iServerPort;
	CString sTemp;
	ULONG ulMode = 0;
	
	ZeroMemory(user,100);
	ZeroMemory(password,100);
	if(m_iPlayhandle != -1)
	{
		if(!NET_DVR_StopRealPlay(m_iPlayhandle))
		{
			TRACE("NET_DVR_StopRealPlay failed, m_iPlayhandle = %d", m_iPlayhandle);
		}
	}
	m_bNeedjudge = FALSE;
	playstru.lChannel = ipinfo->m_iChannel;
	playstru.lLinkMode = ipinfo->m_dwProtocol;
	if(ipinfo->m_dwMultiIPvalue == 0)
		strcpy(multiipaddress,"");
	else
		sprintf(multiipaddress,"%s",ipinfo->m_csMultiIP);
	playstru.sMultiCastIP = multiipaddress;	
	iServerPort = ipinfo->m_wServerport;
	
	playstru.struDisplayPara.nLeft = m_display_para.nLeft;
	playstru.struDisplayPara.nTop = m_display_para.nTop;
	playstru.struDisplayPara.nWidth = m_display_para.nWidth;
	playstru.struDisplayPara.nHeight = m_display_para.nHeight;
	playstru.struDisplayPara.bToScreen = 1;
	playstru.struDisplayPara.bToVideoOut = 1;
	
	TRACE("Use decode card");
	m_iPlayhandle = NET_DVR_RealPlay_Card(ipinfo->m_lServerID,&playstru,m_iSubWndNumber);
	if(m_iPlayhandle == -1)
	{
		sprintf(ipaddress,"%s",ipinfo->m_csIP);
		sTemp.Format("Start to connect IP:%s Channel%d failed!",ipaddress,playstru.lChannel);
		F_AddEvent(sTemp);
		TRACE(sTemp);
	}
	else
	{
		switch(g_nNetDelay) {
		case 0:
			ulMode = 1;
			break;
		case 1:
			ulMode = 2;
			break;
		case 2:
			ulMode = 3;
			break;
		case 3:
			ulMode = 4;
			break;
		case 4:
			ulMode = 5;
			break;
		default:
			ulMode = 3;
			break;
		}
		HW_SetStreamOpenMode((HANDLE)m_iSubWndNumber, ulMode);
		NET_DVR_ThrowBFrame(m_iPlayhandle,1);
		m_csIP = ipinfo->m_csIP;
		m_dwDVRIP = ipinfo->m_dwIPvalue;
		m_lServerID = ipinfo->m_lServerID;
		m_iChannel = playstru.lChannel;
		m_bNeedjudge = TRUE;
	}
}

BOOL CMyOutput::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	return CDialog::DestroyWindow();
}

BOOL CMyOutput::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	if ((nID == 2) || (nID == 1))
		return TRUE;
	
	return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

int CMyOutput::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	m_iSubWndNumber = m_iSubWndCreated++;
	
	m_iPlayhandle = -1;
	m_bPlaying = FALSE;
	m_bNeedjudge = FALSE;
	m_bFileSave = FALSE;
	
	return 0;
}

HBRUSH CMyOutput::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if(ClientParam.m_bUseCard)
	{
		NET_DVR_RestoreSurface_Card();
		return hBrush;
	}
	// TODO: Return a different brush if the default is not desired
	return hbr;
}

void CMyOutput::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	
}

void CMyOutput::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	iActiveWndNumber = m_iSubWndNumber;
	if(m_iPlayhandle < 0)
		return;
	CNewclientDlg*  mainwnd =(CNewclientDlg*) AfxGetMainWnd();	
	m_iWindowNum = mainwnd->WINDOWNUM;
	if(ClientParam.m_bFullScreen || ClientParam.m_bMultiScreen)
	{
		ClientParam.m_bFullScreen = FALSE;
		ClientParam.m_bEnlarged = FALSE;
		ClientParam.m_bMultiScreen = FALSE;
		NET_DVR_ThrowBFrame(m_iPlayhandle, 2);		
		mainwnd->F_EndFullScreen();
		mainwnd->ArrayWindow(iActiveWndNumber,m_iWindowNum);
		mycurwin.ShowWindow(SW_SHOW);
		mainwnd->MoveCurWin(m_iWindowNum,iActiveWndNumber);	
		return;
	}
	
	if( (ClientParam.m_bEnlarged) || (m_iWindowNum == 1) )
	{	//One window or enlarge window
		mainwnd->F_FullScreen();
		MoveWindow(0, 0, 1024, 768, TRUE);
		NET_DVR_ThrowBFrame(m_iPlayhandle, 0);
		ShowWindow(SW_SHOW);
		ClientParam.m_bFullScreen = TRUE;
	}
	else
	{	//Multi windows
		NET_DVR_ThrowBFrame(m_iPlayhandle,0);
		m_iWindowNum = 1;
		ClientParam.m_bEnlarged = TRUE;
		mainwnd->ArrayWindow(iActiveWndNumber,m_iWindowNum);
		mainwnd->MoveCurWin(m_iWindowNum,iActiveWndNumber);	
	}
	if(!ClientParam.m_bUseCard)
	{	
		DWORD dwBright,dwContrast, dwSaturation, dwHue;
		dwBright = dwContrast = dwContrast = dwHue = 0;
		NET_DVR_ClientGetVideoEffect(m_iPlayhandle, &dwBright,&dwContrast, &dwSaturation, &dwHue);
		ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness = dwBright;
		ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast = dwContrast;
		ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation = dwSaturation;
		ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue = dwHue;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -