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

📄 viewschedlg.cpp

📁 视频播放控制器程序
💻 CPP
字号:
// ViewScheDlg.cpp : implementation file
//

#include "stdafx.h"
#include "LiveController.h"
#include "ViewScheDlg.h"
#include "NameListShow.h"
#include "WordListShow.h"


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

/////////////////////////////////////////////////////////////////////////////
// CViewScheDlg dialog


CViewScheDlg::CViewScheDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CViewScheDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CViewScheDlg)
	m_strChannel = _T("");
	m_strDesc = _T("");
	m_strStopTime = _T("");
	m_strName = _T("");
	m_strStartTime = _T("");
	m_strPlayState = _T("");
	//}}AFX_DATA_INIT
	m_pWorkingSche = NULL;
	m_PlayImage.Create( IDB_BITMAP1, 16, 1, RGB(255,255,255) );
	m_pStreamServer = NULL;
}


void CViewScheDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CViewScheDlg)
	DDX_Control(pDX, IDC_PLAY_LIST, m_ctrPlayList);
	DDX_Text(pDX, IDC_EDIT_CHANNEL, m_strChannel);
	DDX_Text(pDX, IDC_EDIT_DESC, m_strDesc);
	DDX_Text(pDX, IDC_EDIT_ET, m_strStopTime);
	DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
	DDX_Text(pDX, IDC_EDIT_ST, m_strStartTime);
	DDX_Text(pDX, IDC_EDIT_STATE, m_strPlayState);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CViewScheDlg, CDialog)
	//{{AFX_MSG_MAP(CViewScheDlg)
	ON_BN_CLICKED(IDC_BTN_AUTO, OnBtnAuto)
	ON_BN_CLICKED(IDC_BTN_SWITCH, OnBtnSwitch)
	ON_BN_CLICKED(IDC_BTN_INSERT, OnBtnInsert)
	ON_NOTIFY(NM_CLICK, IDC_PLAY_LIST, OnClickPlayList)
	ON_BN_CLICKED(IDC_BN_NameListShow, OnBNNameListShow)
	ON_BN_CLICKED(IDC_BN_WordListShow, OnBNWordListShow)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CViewScheDlg message handlers
void CViewScheDlg::OnBtnSwitch() 
{
	POSITION pos = m_ctrPlayList.GetFirstSelectedItemPosition();
	if (pos)
	{
		int nIndex = m_ctrPlayList.GetNextSelectedItem( pos );
		DWORD nSelectedPlayID = m_ctrPlayList.GetItemData(nIndex);
		CPlayItem *pItem = m_pWorkingSche->m_pSeqPlayList_H;
		while ( pItem )
		{
			if ( pItem->m_nPlayItemID == (int)nSelectedPlayID ) {
				break;
			}
			pItem = pItem->m_pNext;
		}
		if ( pItem && m_pStreamServer )
		{
			// Send Play item switch
			m_pStreamServer->SendStreamCtrl( OPERATION_START,
				m_pWorkingSche->m_nScheID, pItem->m_nPlayItemID );
			GetDlgItem(IDC_BTN_SWITCH)->EnableWindow(FALSE);
		}
	}
}

void CViewScheDlg::OnBtnAuto() 
{
	// Send Play item switch
	m_pStreamServer->SendStreamCtrl( OPERATION_START, m_pWorkingSche->m_nScheID, 0 );
	GetDlgItem(IDC_BTN_AUTO)->EnableWindow(FALSE);
}

void CViewScheDlg::OnBtnInsert() 
{
	// TODO: Add your control notification handler code here
	
}

void CViewScheDlg::OnClickPlayList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LPNMITEMACTIVATE pNmitem = (LPNMITEMACTIVATE)pNMHDR;
	UINT uFlags;
	int nIndex = m_ctrPlayList.HitTest( CPoint(pNmitem->ptAction), &uFlags );
	if ( nIndex < 0 )
	{
		GetDlgItem(IDC_BTN_SWITCH)->EnableWindow(FALSE);
		*pResult = 0;
		return;
	}
	
	GetDlgItem(IDC_BTN_SWITCH)->EnableWindow(TRUE);
	*pResult = 0;
}

BOOL CViewScheDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	if ( m_pWorkingSche == NULL ) {
		return FALSE;
	}
	
	LVCOLUMN	lvcol;
	lvcol.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT;
	lvcol.fmt = LVCFMT_LEFT;
	lvcol.pszText = _T( "序号" );
	lvcol.iSubItem = 1;
	m_ctrPlayList.InsertColumn( 0, &lvcol );
	m_ctrPlayList.SetColumnWidth( 0, 50 );
	lvcol.pszText = _T( "源名称" );
	m_ctrPlayList.InsertColumn( 1, &lvcol );
	m_ctrPlayList.SetColumnWidth( 1, 180 );
	lvcol.pszText = _T( "类型" );
	m_ctrPlayList.InsertColumn( 2, &lvcol );
	m_ctrPlayList.SetColumnWidth( 2, 50 );
	lvcol.pszText = _T( "开始点" );
	m_ctrPlayList.InsertColumn( 3, &lvcol );
	m_ctrPlayList.SetColumnWidth( 3, 60 );
	lvcol.pszText = _T( "重复" );
	m_ctrPlayList.InsertColumn( 4, &lvcol );
	m_ctrPlayList.SetColumnWidth( 4, 50 );
	lvcol.pszText = _T( "路径" );
	m_ctrPlayList.InsertColumn( 5, &lvcol );
	m_ctrPlayList.SetColumnWidth( 5, 230 );
	DWORD dwStyle = m_ctrPlayList.GetExtendedStyle();
	dwStyle |= LVS_EX_FULLROWSELECT;
	dwStyle |= LVS_EX_GRIDLINES;
    m_ctrPlayList.SetExtendedStyle(dwStyle);

	m_ctrPlayList.SetImageList( &m_PlayImage, LVSIL_SMALL );
	RefreshPlayList(m_pWorkingSche->m_nScheID);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CViewScheDlg::SetWorkingSche( CSchedule *pSche )
{
	m_pWorkingSche = pSche;
	if ( pSche == NULL ) {
		return FALSE;
	}

	m_strName = m_pWorkingSche->m_strName;
	m_strDesc = m_pWorkingSche->m_strDesc;
	m_strStartTime = m_pWorkingSche->m_nStartime.Format("%Y-%m-%d %H:%M:%S");
	m_strStopTime = m_pWorkingSche->m_nStoptime.Format("%Y-%m-%d %H:%M:%S");
	// PlayState
	if ( pSche->m_nPlayState == SCHE_PLAY_STATE_WAITING )
		m_strPlayState = "等待播出";
	else
	if ( pSche->m_nPlayState == SCHE_PLAY_STATE_PLAYING )
		m_strPlayState = "正在播出";
	else
	if ( pSche->m_nPlayState == SCHE_PLAY_STATE_OVER )
		m_strPlayState = "已经结束";
	else m_strPlayState = "未定义";

	m_strChannel.Format( "%s %d", (LPCTSTR)(m_pWorkingSche->m_strMCastIP),
						 m_pWorkingSche->m_nMCastPort );
	return TRUE;
}

void CViewScheDlg::RefreshPlayList( DWORD nScheID )
{
	if ( !IsWindow(GetSafeHwnd()) || !m_pWorkingSche ||
		 m_pWorkingSche->m_nScheID != nScheID ) {
		return;
	}
	int nIndex = 0;
	CString strTemp;
	LVITEM tempLvi;
	tempLvi.mask = LVIF_IMAGE | LVIF_TEXT;
	tempLvi.stateMask = -1;
	CPlayItem *pItem = m_pWorkingSche->m_pSeqPlayList_H;
	int nItemCount = m_ctrPlayList.GetItemCount();
	while ( pItem )
	{
		tempLvi.iItem = nIndex;
		tempLvi.iSubItem = 0;
		if ( pItem->m_nPlayItemID == m_pWorkingSche->m_nCurPlayItem ) {
			tempLvi.iImage = 0;
		}
		else tempLvi.iImage = 1;
		strTemp.Format( "%d", pItem->m_nPlayItemID );
		tempLvi.pszText = (char *)(LPCTSTR)(strTemp);
		if ( nIndex >= nItemCount ) {
			m_ctrPlayList.InsertItem(&tempLvi);
		}
		else {
			m_ctrPlayList.SetItem(&tempLvi);
		}

		// Vidsrc Name
		tempLvi.iSubItem = 1;
		tempLvi.pszText = (char *)(LPCTSTR)(pItem->m_strSourceName);
		m_ctrPlayList.SetItem( &tempLvi );
		
		// Vidsrc Type
		tempLvi.iSubItem = 2;
		strTemp.Format( "%d", pItem->m_nVidSrcType );
		tempLvi.pszText = (char *)(LPCTSTR)strTemp;
		m_ctrPlayList.SetItem( &tempLvi );

		// begin
		tempLvi.iSubItem = 3;
		strTemp.Format( "%d秒", pItem->m_nPlayValue );
		tempLvi.pszText = (char *)(LPCTSTR)strTemp;
		m_ctrPlayList.SetItem( &tempLvi );

		// repeat count
		tempLvi.iSubItem = 4;
		if ( pItem->m_nRepeatCount > 0 ) {
			strTemp.Format( "%d次", pItem->m_nRepeatCount );
		}
		else {
			strTemp = "无限";
		}
		tempLvi.pszText = (char *)(LPCTSTR)strTemp;
		m_ctrPlayList.SetItem( &tempLvi );

		// Vidsrc Path
		tempLvi.iSubItem = 5;
		tempLvi.pszText = (char *)(LPCTSTR)(pItem->m_strSourcePath);
		m_ctrPlayList.SetItem( &tempLvi );
		
		m_ctrPlayList.SetItem( &tempLvi );
		m_ctrPlayList.SetItemData( nIndex, pItem->m_nPlayItemID );
		pItem = pItem->m_pNext;
		nIndex++;
	}
	for ( ; nIndex < nItemCount; nIndex++ )
	{
		m_ctrPlayList.DeleteItem(nIndex);
	}
}

void CViewScheDlg::RefreshScheState( DWORD nScheID )
{
	if ( !IsWindow(GetSafeHwnd()) || !m_pWorkingSche ||
		 m_pWorkingSche->m_nScheID != nScheID ) {
		return;
	}
	// PlayState
	if ( m_pWorkingSche->m_nPlayState == SCHE_PLAY_STATE_WAITING )
		m_strPlayState = "等待播出";
	else
	if ( m_pWorkingSche->m_nPlayState == SCHE_PLAY_STATE_PLAYING )
		m_strPlayState = "正在播出";
	else
	if ( m_pWorkingSche->m_nPlayState == SCHE_PLAY_STATE_OVER )
		m_strPlayState = "已经结束";
	else m_strPlayState = "未定义";
	UpdateData(FALSE);
}

void CViewScheDlg::OnBNNameListShow() 
{
	// TODO: Add your control notification handler code here
	CNameListShow dlg;
	dlg.WorkingSche_ID = m_pWorkingSche->m_nScheID;
	dlg.m_pdbInterface = & m_DBInterface;
	dlg.DoModal();
}

void CViewScheDlg::OnBNWordListShow() 
{
	// TODO: Add your control notification handler code here
	CWordListShow dlg;
	dlg.WorkingSche_ID = m_pWorkingSche->m_nScheID;
	dlg.pInterface = &m_DBInterface;
	dlg.DoModal();
}

⌨️ 快捷键说明

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