📄 programdlg.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 + -