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

📄 programdlg.cpp

📁 生成关于EPG的XML文档工具
💻 CPP
字号:
// ProgramDlg.cpp : implementation file
//

#include "stdafx.h"
#include <string.h>
#include "XmlEncapsulate.h"
#include "XMLGENERATE.h"
#include "ProgramDlg.h"

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

extern HANDLE b;
const char WeekDay[7][10] = { "今天", "第二天", "第三天", "第四天", "第五天", "第六天", "第七天" };

/////////////////////////////////////////////////////////////////////////////
// CProgramDlg dialog


CProgramDlg::CProgramDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CProgramDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CProgramDlg)
	m_strWeek = _T("");
	m_strChanName = _T("");
	m_strChanTag = _T("");
	//}}AFX_DATA_INIT
}


void CProgramDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CProgramDlg)
	DDX_Control(pDX, IDC_LIST_Program, m_listProgram);
	DDX_Control(pDX, IDC_EDIT_ChanTag, m_ctrChanTag);
	DDX_Control(pDX, IDC_EDIT_ChanName, m_ctrChanName);
	DDX_Control(pDX, IDC_COMBO_Week, m_ctrWeek);
	DDX_CBString(pDX, IDC_COMBO_Week, m_strWeek);
	DDX_Text(pDX, IDC_EDIT_ChanName, m_strChanName);
	DDX_Text(pDX, IDC_EDIT_ChanTag, m_strChanTag);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CProgramDlg, CDialog)
	//{{AFX_MSG_MAP(CProgramDlg)
	ON_CBN_SELCHANGE(IDC_COMBO_Week, OnSelchangeCOMBOWeek)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_VALIDATE, OnEndLabelEditVariableCriteria)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CProgramDlg message handlers

BOOL CProgramDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here

	// Initialization of all texts or buttons
	m_ctrChanName.SetWindowText( (LPCTSTR)m_ChanName );
	m_ctrChanTag.SetWindowText( (LPCTSTR)m_ChanTag );
	m_ctrChanName.EnableWindow(FALSE);
	m_ctrChanTag.EnableWindow(FALSE);

	for( int i = 0; i < 7; i++ )
	{
		m_ctrWeek.AddString( WeekDay[i] );
	}

	// Initialization of the list box
	m_listProgram.InsertColumn( 0, "Program Tag" );
	m_listProgram.InsertColumn( 1, "Program Name" );
	m_listProgram.InsertColumn( 2, "Start Time" );
	m_listProgram.InsertColumn( 3, "End Time" );
	m_listProgram.InsertColumn( 4, "WeekDay" );
	m_listProgram.InsertColumn( 5, "Content" );
	
	m_listProgram.SetColumnWidth(0,100);
	m_listProgram.SetColumnWidth(1,160);
	m_listProgram.SetColumnWidth(2,100);
	m_listProgram.SetColumnWidth(3,100);
	m_listProgram.SetColumnWidth(4,100);
	m_listProgram.SetColumnWidth(5,160);

	m_listProgram.SetReadOnlyColumns(0); // read only
	m_listProgram.SetReadOnlyColumns(2);
	m_listProgram.SetReadOnlyColumns(3);
	m_listProgram.SetReadOnlyColumns(4);

	CString strValidChars;
	strValidChars = "";
	m_listProgram.SetColumnValidEditCtrlCharacters(strValidChars,1); // none control edit 
	m_listProgram.SetColumnValidEditCtrlCharacters(strValidChars,5); // none control edit 

	m_listProgram.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

	m_ctrWeek.SetCurSel(0);
	RefreshData();

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

void CProgramDlg::RefreshData()
{
	m_listProgram.DeleteAllItems();
	m_listProgram.SetRedraw(FALSE);

	UpdateData(TRUE);
	// Get the start and the end time of one day
	unsigned long from;
	unsigned long to;
	int index = m_ctrWeek.GetCurSel();
	m_ctrWeek.GetLBText( index, m_strWeek );
	ConvertWeek( m_strWeek, &from, &to );

	// Get the Programs belonged to the assigned DigChan
	int MaxPro;
	const char** NameTag
		= ( const char** )malloc( 10 * sizeof(char) * MAX_PROGRAM_PER_DIGCHAN );
	XmlCOUNT( b, (LPCTSTR)m_strChanTag, &MaxPro, NameTag );

	// Get the requested programs and show them all
	int j = 0;
	for( int i = 0; i < MaxPro; i++ )
	{
		EPGPROGRAM Pro;
		XmlGETAll( b, NameTag[i], &Pro );
		if( ( ( Pro.dwStart + Pro.duration ) > from ) && ( ( Pro.dwStart + 100 ) < to ) )
		{
			char cstart[5];
			char cend[5];
			m_listProgram.InsertItem( j, NameTag[i] );
			m_listProgram.SetItemText( j, 1, Pro.szProgName );
			ConvertTime( Pro.dwStart, cstart, 0 );
			m_listProgram.SetItemText( j, 2, (LPCTSTR)cstart );
			ConvertTime( ( Pro.dwStart + Pro.duration ), cend, 1 );
			m_listProgram.SetItemText( j, 3, (LPCTSTR)cend );
			m_listProgram.SetItemText( j, 4, m_strWeek );
			m_listProgram.SetItemText( j, 5, (LPCTSTR)Pro.strContent );
			j++;
		}
	}

	free(NameTag);
	
	m_listProgram.SetRedraw(TRUE);
}

void CProgramDlg::OnSelchangeCOMBOWeek() 
{
	// TODO: Add your control notification handler code here

	RefreshData();
}

LRESULT CProgramDlg::OnEndLabelEditVariableCriteria(WPARAM wParam, LPARAM lParam) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)lParam;
	// TODO: Add your control notification handler code here

	int index = pDispInfo->item.iItem;
	CString tag = m_listProgram.GetItemText( index, 0 );
	CString change = m_listProgram.GetItemText( index, pDispInfo->item.iSubItem );
	char* cname = ( char* )malloc( ( EVENT_NAME_MAX_LEN + 1 ) * sizeof(char) );
	char* ccontent = ( char* )malloc( ( CONTENT_LENGTH + 1 ) * sizeof(char) );
	switch( pDispInfo->item.iSubItem ) 
	{
	case 1:
		if( change.GetLength() > EVENT_NAME_MAX_LEN )
		{
			MessageBox( "请输入少于40个字符" );
			RefreshData();
			return 0;
		}
		strcpy( cname, (LPCTSTR)change );
		XmlMODs( b, (LPCTSTR)tag, "szProgName", cname );
		free( cname );
		break;
	case 5:
		if( change.GetLength() > CONTENT_LENGTH )
		{
			MessageBox( "请输入少于50个字符" );
			RefreshData();
			return 1;
		}
		strcpy( ccontent, (LPCTSTR)change );
		XmlMODs( b, (LPCTSTR)tag, "strContent", ccontent );
		free( ccontent );
		break;
	default:
		RefreshData();
		return 0;
	}

	XmlWriteFile( b );
	return 1;
}

void CProgramDlg::ConvertWeek( CString week, unsigned long* from, unsigned long* to )
{
	for( int i = 0; i < 7; i++ )
	{
		if( strcmp( WeekDay[i], (LPCTSTR)week ) == 0 )
		{
			*from = GetStartTime() + SECOND_PER_DAY * i;
			*to = *from + SECOND_PER_DAY;
			return ;
		}
	}
}

void CProgramDlg::ConvertTime( unsigned long Time, char* Clock, int flag )
{
	unsigned long residue;
	int hour, minute, second;
	char chour[2];
	char cminute[2];
	char temp[2];

	residue = Time % SECOND_PER_DAY;

	if( flag && ( residue == 0 ) )
	{
		strcpy( Clock, "24:00" );
		return ;
	}

	// Calculate the clock
	hour = residue / 3600;
	residue = residue % 3600;
	minute = residue / 60;
	second = residue % 60;

	// Combination of the clock
	if( hour < 10 )
	{
		_itoa( 0, Clock, 10 );
		_itoa( hour, chour, 10 );
		strcat( Clock, chour );
	}
	else
	{
		_itoa( hour, Clock, 10 );
	}

	if( minute < 10 )
	{
		_itoa( 0, cminute, 10 );
		_itoa( minute, temp, 10 );
		strcat( cminute, temp );
	}
	else
	{
		_itoa( minute, cminute, 10 );
	}
	strcat( Clock, ":" );
	strcat( Clock, cminute );	
}

⌨️ 快捷键说明

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