www.pudn.com > CirMMI.rar > DispatchCmdDlg.cpp


// DispatchCmdDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "CirMMI.h" 
#include "CirMMIDlg.h" 
#include "DispatchCmdDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CDispatchCmdDlg dialog 
 
 
INT  BuildFrame(BYTE *FrameAr,BYTE op,BYTE cmd,BYTE sport,BYTE dport,BYTE *data,INT datalen) 
{ 
	INT ret=0; 
	CPack pack; 
	pack.SetPort(sport,dport); 
	pack.SetSourceAddr(NULL,0); 
	pack.SetDestAddr (NULL,0); 
	pack.Setcboperation (op); 
	pack.SetCmd (cmd); 
	pack.SetData (data,datalen); 
	pack.BuildPack(); 
	BYTE *pdata=pack.GetPackAr ();  //不用释放 
	SHORT tmpslen=pack.GetLen (); 
	BYTE *pBytes=pack.PackDLE (pdata,tmpslen); 
	if(pBytes) 
	{ 
		ret=tmpslen;				 
		if(tmpslen>0) 
			memcpy(FrameAr,pBytes,tmpslen);		 
		delete[] pBytes; 
				 
	 
	} 
 
	return ret; 
 
} 
 
CDispatchCmdDlg::CDispatchCmdDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CDispatchCmdDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDispatchCmdDlg) 
	m_strCmdNum = _T(""); 
	m_strCmdState = _T(""); 
	m_strDay = _T(""); 
	m_strFrom = _T(""); 
	m_strHour = _T(""); 
	m_strMan = _T(""); 
	m_strMinute = _T(""); 
	m_strMonth = _T(""); 
	m_strPage = _T(""); 
	m_strRevState = _T(""); 
	m_strRunning = _T(""); 
	m_strSecond = _T(""); 
	m_strTotalPage = _T(""); 
	m_strTrainID = _T(""); 
	m_strYear = _T(""); 
	//}}AFX_DATA_INIT 
	this->m_brushBkGnd.CreateSolidBrush(g_CommonSet.crMainBk); 
	this->m_penLine.CreatePen(PS_SOLID, 1, RGB(87, 88, 71));//边框画笔 
 
	//编辑框字体 
	LOGFONT lf; 
	memset(&lf, 0, sizeof(lf)); 
 
	lf.lfOutPrecision= 3; 
	lf.lfClipPrecision= 2; 
	lf.lfQuality= 1; 
	lf.lfPitchAndFamily= 49; 
	lf.lfHeight= -18;//小四 -24:小二 
	lf.lfWeight= 400; 
	lf.lfCharSet= GB2312_CHARSET; 
	//lf.lfCharSet= DEFAULT_CHARSET; 
	wcscpy(lf.lfFaceName, _T("新宋体")); 
	m_fontOfEdit.m_hObject= ::CreateFontIndirect(&lf); 
 
 
	g_CommonSet.pFontItalicTitle->GetLogFont(&lf); 
	lf.lfItalic=0; 
	lf.lfHeight=-18; 
	lf.lfWeight=600; 
 
	m_ftTitle.CreateFontIndirect(&lf); 
 
 
 
	m_hbrMainBk=::CreateSolidBrush (RGB(0,54,54)); 
	m_hbrRedBk=::CreateSolidBrush (RGB(250,20,20)); 
	m_hbrGreenBk=::CreateSolidBrush (RGB(103,198,57)); 
	m_hbrRamaranthBk=::CreateSolidBrush (RGB(128,0,128)); 
	m_hbrBrownBk=::CreateSolidBrush (RGB(128,64,0)); 
	m_hbrBlackBk=(HBRUSH)::GetStockObject (BLACK_BRUSH ); 
	m_hbrWhiteBk=(HBRUSH)::GetStockObject (WHITE_BRUSH); 
	m_hbrStateBk=::CreateSolidBrush(RGB(180,20,100)); 
 
	m_hbrBlueBk=::CreateSolidBrush(RGB(0,0,255)); 
	m_nCurPage=0; 
	m_bReaded=TRUE; 
 
} 
 
 
void CDispatchCmdDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDispatchCmdDlg) 
	DDX_Control(pDX, IDC_STATIC_YEAR, m_ctYear); 
	DDX_Control(pDX, IDC_STATIC_TRAINID, m_ctTrainID); 
	DDX_Control(pDX, IDC_STATIC_TOTALPAGE, m_ctTotalPage); 
	DDX_Control(pDX, IDC_STATIC_SECOND, m_ctSecond); 
	DDX_Control(pDX, IDC_STATIC_RUNNING, m_ctRunning); 
	DDX_Control(pDX, IDC_STATIC_REVSTATE, m_ctRevState); 
	DDX_Control(pDX, IDC_STATIC_PAGE, m_ctPage); 
	DDX_Control(pDX, IDC_STATIC_MONTH, m_ctMonth); 
	DDX_Control(pDX, IDC_STATIC_MINUTE, m_ctMinute); 
	DDX_Control(pDX, IDC_STATIC_MAN, m_ctMan); 
	DDX_Control(pDX, IDC_STATIC_HOUR, m_ctHour); 
	DDX_Control(pDX, IDC_STATIC_FROM, m_ctFrom); 
	DDX_Control(pDX, IDC_STATIC_DAY, m_ctDay); 
	DDX_Control(pDX, IDC_STATIC_CMDSTATE, m_ctCmdState); 
	DDX_Control(pDX, IDC_STATIC_CMDNUM, m_ctCmdNum); 
	DDX_Control(pDX, IDC_STATIC_TITLE, m_ctCodeName); 
	DDX_Control(pDX, IDC_EDIT_TEXT, m_editContent); 
	DDX_Text(pDX, IDC_STATIC_CMDNUM, m_strCmdNum); 
	DDX_Text(pDX, IDC_STATIC_CMDSTATE, m_strCmdState); 
	DDX_Text(pDX, IDC_STATIC_DAY, m_strDay); 
	DDX_Text(pDX, IDC_STATIC_FROM, m_strFrom); 
	DDX_Text(pDX, IDC_STATIC_HOUR, m_strHour); 
	DDX_Text(pDX, IDC_STATIC_MAN, m_strMan); 
	DDX_Text(pDX, IDC_STATIC_MINUTE, m_strMinute); 
	DDX_Text(pDX, IDC_STATIC_MONTH, m_strMonth); 
	DDX_Text(pDX, IDC_STATIC_PAGE, m_strPage); 
	DDX_Text(pDX, IDC_STATIC_REVSTATE, m_strRevState); 
	DDX_Text(pDX, IDC_STATIC_RUNNING, m_strRunning); 
	DDX_Text(pDX, IDC_STATIC_SECOND, m_strSecond); 
	DDX_Text(pDX, IDC_STATIC_TOTALPAGE, m_strTotalPage); 
	DDX_Text(pDX, IDC_STATIC_TRAINID, m_strTrainID); 
	DDX_Text(pDX, IDC_STATIC_YEAR, m_strYear); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CDispatchCmdDlg, CDialog) 
	//{{AFX_MSG_MAP(CDispatchCmdDlg) 
	ON_WM_CANCELMODE() 
	ON_WM_CTLCOLOR() 
	ON_WM_PAINT() 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
	INIT_EXIT_MAP(InitWnd,ExitWnd) 
	MY_KEY_MAP(OnKeyProc) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDispatchCmdDlg message handlers 
 
BOOL CDispatchCmdDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
 
	m_pFrmWnd=GetParent(); 
	//调度命令标题字体大小 
	m_ctCodeName.SetFont(&m_ftTitle); 
	//编辑框字体 
	m_editContent.SetFont(&m_fontOfEdit); 
/*	m_editContent.SetWindowText(\ 
		_T("          行路难\ 
		\r\n金樽清酒斗十千,玉盘珍羞值万钱。\ 
		\r\n停杯投箸不能食,拔剑四顾心茫然。\ 
		\r\n欲渡黄河冰塞川,将登太行雪满山。\ 
		\r\n闲来垂钓碧溪上,忽复乘舟梦日边。\ 
		\r\n行路难,行路难,多歧路,今安在?\ 
		\r\n长风破浪会有时,直挂云帆济沧海。")); 
	m_editContent.SetSel(0,0); 
*/ 
	//CreateCaret() 
 
 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CDispatchCmdDlg::OnCancelMode()  
{ 
	CDialog::OnCancelMode(); 
	 
	// TODO: Add your message handler code here 
	 
} 
 
LRESULT CDispatchCmdDlg::InitWnd(WPARAM wParam, LPARAM lParam) 
{ 
	CCirMMIDlg* pMainDlg=(CCirMMIDlg*)m_pFrmWnd; 
	 
	g_CommonSet.bPlayAudio=FALSE; 
 
	m_nCurPage=0; 
 
	if(m_CurTransCmd.code!=0) 
		DisplayTranCmd(m_CurTransCmd); 
	else 
	{ 
		m_ctCodeName.SetWindowText(_T("没有收到调度命令")); 
		m_editContent.SetWindowText(_T("没有收到调度命令")); 
	} 
	 
	m_editContent.SetFocus(); 
	m_bReaded=TRUE; 
	if(!(m_CurTransCmd.cmd_state & MASK_SIGNIN ) && m_nTotalPage>m_nPageCodeOfCurrent) 
		m_bReaded=FALSE; 
	 
	CString str; 
	m_ctTrainID.GetWindowText(str); 
 
	m_PreTransCmd= m_CurTransCmd; 
 
	return 1; 
} 
 
LRESULT CDispatchCmdDlg::ExitWnd(WPARAM wParam, LPARAM lParam) 
{ 
	CCirMMIDlg* pMainDlg=(CCirMMIDlg*)m_pFrmWnd; 
	 
	//m_BufferOfPrint.bInvalidate=FALSE; 
	PostMcuCommQueue(CLOSE_SPEAKER,sizeof CLOSE_SPEAKER); 
	g_Play.EmptyQueue(); 
	g_Play.StopPlay(); 
 
	return 1; 
} 
 
CString GetCmdAddr(const UNICODE_TRANSFER_CMD &tranW) 
{ 
	CString str; 
	int len=lstrlen(tranW.ptext); 
	int istate=0; 
	int left=0,right=0; 
	for(int i=1;i=0x18 && tranW.code<=0x1F) 
		{ 
			str.Format(L"其它信息");   
			bIsOtherType= TRUE;//是其他信 
		} 
		else 
		{ 
			return; 
		} 
	} 
	strTitle=str;//保存一下,后面还要用到 
	m_ctCodeName.SetWindowText(strTitle); 
	 
	//发令编号 
	m_strCmdNum=tranW.tran_command_num; 
 
	//发令人 
	m_strMan=tranW.tran_name; 
	//发令处所 
	CString cmdAddr=GetCmdAddr(tranW); 
	if(cmdAddr.IsEmpty()) 
		m_strFrom.Format(_T("%03d"),tranW.cmder_num); 
	else 
		m_strFrom=cmdAddr; 
 
 
	CString strTime; 
	//下达时间的年 
	strTime.Format(_T("%02d"),BCDTOBINARY(tranW.date_time .date.year)); 
	m_strYear=strTime; 
	 
	//下达时间的月 
	strTime.Format(_T("%02d"),BCDTOBINARY(tranW.date_time .date .month)); 
	m_strMonth=strTime; 
 
	//下达时间的日 
	strTime.Format(_T("%02d"),BCDTOBINARY(tranW.date_time .date .day)); 
	m_strDay=strTime; 
 
	//下达时间的时 
	strTime.Format(_T("%02d"),BCDTOBINARY(tranW.date_time .time .hour)); 
	m_strHour=strTime; 
 
	//下达时间的分 
	strTime.Format(_T("%02d"),BCDTOBINARY(tranW.date_time .time .minute)); 
	m_strMinute=strTime; 
 
	//下达时间的秒 
	strTime.Format(_T("%02d"),BCDTOBINARY(tranW.date_time .time .second)); 
	m_strSecond=strTime; 
	//车次号 
	str=tranW.train_sn; 
	str=str.Left (7); 
	m_strRunning=str; 
	 
	//机车号 
	 
	if(TRUE) //翻译机车号 
	{ 
		TRACE(L"\ntrancmd.train_id= %s\n",trancmd.train_id); 
		str=GetTrainTypeByID(trancmd.train_id,3); 
		str+='-'; 
		for(int i=3;i0) 
		{ 
			m_editContent.SetWindowText(tranW.ptext); 
		} 
		else 
			m_editContent.SetWindowText(_T("")); 
	} 
 
	//显示页数 
	DisplayPageInfo(); 
	UpdateData(FALSE); 
 
} 
 
//显示调度命令正文页数:总页数,本页数 
void CDispatchCmdDlg::DisplayPageInfo() 
{ 
	CString strTemp; 
	INT perpagelines= 8;//每页8行  
	INT lines= this->m_editContent.GetLineCount();//总行数 
	INT iRemainder= lines%perpagelines; 
	INT sumpage= lines/perpagelines+1; 
	if(0==iRemainder) 
	{ 
		sumpage--; 
	} 
	 
	INT curpage= (this->m_editContent.GetFirstVisibleLine()+(perpagelines-1))/perpagelines+1; 
	curpage= min(sumpage,curpage); 
	//显示总页数 
	strTemp.Format (L"%02d",sumpage); 
	m_strTotalPage=strTemp; 
	 
	strTemp.Format(L"%02d",curpage); 
	m_strPage=strTemp; 
 
	this->m_nPageCodeOfCurrent= curpage; 
	this->m_nTotalPage= sumpage; 
 
	m_ctTotalPage.SetWindowText(m_strTotalPage); 
	m_ctPage.SetWindowText(m_strPage); 
 
	if(!m_bReaded) 
		m_bReaded=sumpage<=curpage; 
 
} 
 
//将调度命令的数据段内容,分类保存到一个调度命令结构体中(TRANSFER_CMD) 
BOOL CDispatchCmdDlg::PackUpDspchCmd(BYTE* data, SHORT slen) 
{ 
	if(slen<=0) 
		return FALSE; 
//用于打印 
	m_BufferOfPrint.bInvalidate=TRUE; 
	memcpy(m_BufferOfPrint.cbBufPrint,data,slen); 
	m_BufferOfPrint.iTotal=slen; 
	 
 
TRANSFER_CMD CurTransCmd;//临时的变量 
	 
#define CALU_BCD(cb)  (cb)//((cb>>4) *10 + (cb&0xf)) 
	 
	INT offset= 0;; 
	CurTransCmd.code=data[0]; 
	offset++; 
	//时期时间 
	memcpy(&CurTransCmd.date_time,data+offset,sizeof(CurTransCmd.date_time)); 
	 
	offset+=sizeof(CurTransCmd.date_time); 
	 
	 
	//时间2 
	//CurTransCmd.time2.h= CALU_BCD(data[offset]); 
	//offset++; 
	//CurTransCmd.time2.m= CALU_BCD(data[offset]); 
	//offset++; 
	 
	CurTransCmd.time2.hour=data[offset++]; 
	CurTransCmd.time2.minute=data[offset++]; 
	CurTransCmd.time2.second=data[offset++]; 
 
 
	 
	//车次号 
	memcpy(CurTransCmd.train_sn, data+offset,7); 
	offset+=7; 
	 
	//机车号 
	memcpy(CurTransCmd.train_id, data+offset,sizeof CurTransCmd.train_id); 
	offset+=sizeof CurTransCmd.train_id; 
	 
	CurTransCmd.cmder_num=data[offset]; 
	offset++; 
	 
	memcpy(CurTransCmd.tran_command_num, data+offset,6); 
	offset+=6; 
	 
	memcpy(CurTransCmd.tran_name, data+offset,8); 
	offset+=8; 
	 
	//命令状态 
	CurTransCmd.cmd_state=data[offset]; 
	offset++; 
	 
	//保留 
	/*  
	CurTransCmd.unused=data[offset]; 
	offset++; 
	*/ 
	memcpy(CurTransCmd.unused,data+offset,sizeof CurTransCmd.unused); 
	offset+=sizeof CurTransCmd.unused; 
	 
	CurTransCmd.sum_pg=data[offset]; 
	//st_cbSunPk=CurTransCmd.sum_pg; 
	offset++; 
	 
	CurTransCmd.cur_pg=data[offset]; 
	offset++; 
	if(offset>=slen) 
		return FALSE; //error 
	 
 
	 
	if(0!=(CurTransCmd.ptext=new GENERIC_DATA(data+offset,slen-offset))) 
	{ 
		this->m_CurTransCmd.Reset(); 
		this->m_CurTransCmd= CurTransCmd; 
		for(int i=0;m_CurTransCmd.ptext && im_slen;i++) 
		{ 
			if(!m_CurTransCmd.ptext->m_pData[i]) 
				m_CurTransCmd.ptext->m_pData[i]=' '; 
 
		} 
	} 
	return TRUE; 
} 
 
 
HBRUSH CDispatchCmdDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
{ 
	//static CBrush edtbr(g_CommonSet.crMainBk); 
 
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
 
 
	if( pWnd==&m_editContent) 
	{ 
		pDC->SetBkMode (TRANSPARENT); 
		 
		pDC->SetTextColor(RGB(255,255,255)); 
		switch(m_CurTransCmd.code ) 
		{ 
		case 0x03: 
			{ 
				pDC->SetBkColor (RGB(0,200,0)); 
				return m_hbrGreenBk; 
			} 
			break; 
		case 0x04: 
			{ 
				 
				pDC->SetBkColor (RGB(200,0,0)); 
				return m_hbrRedBk; 
			} 
			break; 
		case 0x07:case 0x08:case 0x09:case 0x0a:case 0x0b:case 0x0c: 
			{ 
				pDC->SetBkColor (RGB(128,0,128)); 
				return m_hbrRamaranthBk; 
			} 
			break; 
		default: 
			{ 
				pDC->SetBkColor (RGB(128,64,0)); 
			} 
			 
		} 
		return m_hbrBrownBk; 
 
	}else if(pWnd==&m_ctCodeName) 
	{ 
		 
		pDC->SetBkMode (TRANSPARENT);		 
		if(m_CurTransCmd.cmd_state & MASK_REPAIR) 
		{ 
			pDC->SetTextColor(RGB(200,0,0)); 
		} 
		else 
		{ 
			pDC->SetTextColor(RGB(255,255,255)); 
		} 
	 
		//return (HBRUSH)GetStockObject(GRAY_BRUSH);		 
		 
	}else if(pWnd==&m_ctRunning || pWnd==&m_ctTrainID) 
	{ 
		pDC->SetBkMode(TRANSPARENT); 
		pDC->SetTextColor(RGB(255,0,0)); 
		 
	} 
	else if(pWnd==&m_ctRevState) 
	{ 
		pDC->SetBkMode(TRANSPARENT); 
		if(m_CurTransCmd.cmd_state & MASK_REPAIR) 
		{ 
			pDC->SetTextColor(RGB(255,0,0)); 
		} 
		else 
		{ 
			pDC->SetTextColor(RGB(0,255,0)); 
		} 
	} 
	else if(pWnd==&m_ctCmdState) 
	{ 
		pDC->SetBkMode(TRANSPARENT); 
		if(m_CurTransCmd.cmd_state & MASK_ASK) 
		{ 
			pDC->SetTextColor(RGB(0,255,0)); 
		} 
		else 
		{ 
			pDC->SetTextColor(RGB(255,0,0)); 
		} 
		 
	}else if(pWnd==&m_ctCmdNum 
		||	pWnd==&m_ctMan 
		||	pWnd==&m_ctFrom 
		||	pWnd==&m_ctYear 
		||	pWnd==&m_ctMonth 
		||	pWnd==&m_ctDay 
		||	pWnd==&m_ctHour 
		||	pWnd==&m_ctMinute 
		||	pWnd==&m_ctSecond 
		||	pWnd==&m_ctTotalPage 
		||	pWnd==&m_ctPage 
		) 
	{ 
		pDC->SetBkMode(TRANSPARENT); 
		pDC->SetTextColor(RGB(0,255,0)); 
	} 
	else if(nCtlColor==CTLCOLOR_STATIC) 
	{ 
		pDC->SetBkMode(TRANSPARENT); 
		pDC->SetTextColor(RGB(255,255,255)); 
		 
	} 
	//return m_hbrBlueBk; 
	return hbr; 
} 
 
 
 
void CDispatchCmdDlg::DCQQ(const TRANSFER_CMD &tran) 
{ 
 
CALLBACK_TRANS back; 
int i=0; 
memset(&back,0,sizeof(back)); 
 
back.code=tran.code; 
 
CTime t=CTime::GetCurrentTime (); 
BYTE year=t.GetYear()%100; 
back.date_time.date.year=AcsiiToBCD(year); 
back.date_time.date.month=AcsiiToBCD(t.GetMonth()); 
back.date_time.date.day=AcsiiToBCD(t.GetDay()); 
 
back.date_time.time.hour=AcsiiToBCD(t.GetHour()); 
back.date_time.time.minute=AcsiiToBCD(t.GetMinute()); 
back.date_time.time.second=AcsiiToBCD(t.GetSecond()); 
 
 
memcpy(back.train_sn,tran.train_sn,7); 
for(i=0;i<7;i++) 
	if(!back.train_sn[i]) 
		back.train_sn[i]=0x20; 
 
/* 
memcpy(back.train_id,tran.train_id,4); 
for(i=0;i<4;i++) 
	if(!back.train_id[i]) 
		back.train_id[i]=0x20; 
*/ 
memcpy(back.train_id,tran.train_id,sizeof tran.train_id); 
 
back.commander_num=tran.cmder_num; 
memcpy(back.tran_command_num,tran.tran_command_num,6); 
for(i=0;i<6;i++) 
	if(!back.tran_command_num[i]) 
		back.tran_command_num[i]=0x20; 
 
	back.pg=tran.sum_pg; 
 
CByteArray ar; 
for(i=0;iPostPackToHost(0x06,0x53,0x23,ar.GetData(),ar.GetSize(),TRUE); 
else 
	pDlg->PostPackToHost(0x06,0x53,0x05,ar.GetData(),ar.GetSize(),TRUE); 
*/ 
pDlg->PostPackToHost(0x06,0x51,0x01,ar.GetData(),ar.GetSize(),TRUE); 
 
} 
 
void CDispatchCmdDlg::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	CRect rect; 
	GetClientRect(rect); 
	CBrush brBlack(COLORREF(0)); 
	dc.FrameRect(rect,&brBlack); 
	 
} 
 
BOOL CDispatchCmdDlg::IsAutoHandAck() 
{ 
 
	if(m_PreTransCmd.cmd_state & 0x80) 
	{ 
 
		if(m_PreTransCmd.code==m_CurTransCmd.code 
			&& 0==memcmp(&m_PreTransCmd.date_time,&m_CurTransCmd.date_time,sizeof(m_CurTransCmd.date_time))  
			&& 0==memcmp(m_PreTransCmd.tran_command_num,m_CurTransCmd.tran_command_num,sizeof(m_CurTransCmd.tran_command_num)) 
			) 
		{ 
 
			return TRUE; 
		} 
		else 
			return FALSE; 
 
	} 
	else  
		return FALSE; 
	 
} 
 
 
 
void CDispatchCmdDlg::HandACK(const TRANSFER_CMD &tran,BYTE cbCmd) 
{ 
CCirMMIDlg* pMainDlg=(CCirMMIDlg*)GetParent(); 
CALLBACK_TRANS back; 
int i=0; 
memset(&back,0,sizeof(back)); 
 
back.code=tran.code; 
 
CTime t=CTime::GetCurrentTime (); 
back.date_time.date.year=AcsiiToBCD((t.GetYear()%100)); 
back.date_time.date.month=AcsiiToBCD(t.GetMonth()); 
back.date_time.date.day=AcsiiToBCD(t.GetDay()); 
 
back.date_time.time.hour=AcsiiToBCD(t.GetHour()); 
back.date_time.time.minute=AcsiiToBCD(t.GetMinute()); 
back.date_time.time.second=AcsiiToBCD(t.GetSecond()); 
 
//memcpy(&back.date_time,&tran.date_time,sizeof(back.date_time)); 
 
memcpy(back.train_sn,tran.train_sn,7); 
for(i=0;i<7;i++) 
	if(!back.train_sn[i]) 
		back.train_sn[i]=0x20; 
 
memcpy(back.train_id,tran.train_id,sizeof tran.train_id); 
 
back.commander_num=tran.cmder_num; 
memcpy(back.tran_command_num,tran.tran_command_num,6); 
for(i=0;i<6;i++) 
	if(!back.tran_command_num[i]) 
		back.tran_command_num[i]=0x20; 
 
	back.pg=tran.sum_pg; 
 
CByteArray ar; 
for(i=0;iPostPackToHost(0x06,cbCmd,0x23,ar.GetData(),ar.GetSize(),TRUE); 
else 
	pMainDlg->PostPackToHost(0x06,cbCmd,0x05,ar.GetData(),ar.GetSize(),TRUE); 
*/ 
	pMainDlg->PostPackToHost(0x06,cbCmd,0x01,ar.GetData(),ar.GetSize(),TRUE); 
 
} 
 
void CDispatchCmdDlg::AutoACKCmd(const BYTE *pData, SHORT sLen) 
{ 
CCirMMIDlg* pMainDlg=(CCirMMIDlg*)GetParent(); 
CALLBACK_TRANS back; 
memset(&back,0,sizeof(back)); 
SHORT tmpvar,offset=0; 
offset=0; 
 
#ifdef TDCMD_V3 
back.code=pData[0]; 
offset++; 
tmpvar=sizeof(back.date_time); 
//memcpy(&back.date_time,pData+offset,tmpvar); 
CTime t=CTime::GetCurrentTime (); 
back.date_time.date.year=AcsiiToBCD((t.GetYear()%100)); 
back.date_time.date.month=AcsiiToBCD(t.GetMonth()); 
back.date_time.date.day=AcsiiToBCD(t.GetDay()); 
 
back.date_time.time.hour=AcsiiToBCD(t.GetHour()); 
back.date_time.time.minute=AcsiiToBCD(t.GetMinute()); 
back.date_time.time.second=AcsiiToBCD(t.GetSecond()); 
 
offset+=tmpvar+2; 
tmpvar=18; 
memcpy(&back.train_sn,pData+offset,tmpvar); 
offset+=tmpvar+8+1+1+1; 
back.pg=*(pData+offset); 
#else 
 
back.code=pData[0]; 
offset++; 
tmpvar=sizeof(back.date_time); 
//memcpy(&back.date_time,pData+offset,tmpvar); 
 
CTime t=CTime::GetCurrentTime (); 
back.date_time.date.year=AcsiiToBCD((t.GetYear()%100)); 
back.date_time.date.month=AcsiiToBCD(t.GetMonth()); 
back.date_time.date.day=AcsiiToBCD(t.GetDay()); 
 
back.date_time.time.hour=AcsiiToBCD(t.GetHour()); 
back.date_time.time.minute=AcsiiToBCD(t.GetMinute()); 
back.date_time.time.second=AcsiiToBCD(t.GetSecond()); 
 
offset+=tmpvar+3; 
tmpvar=7; 
memcpy(&back.train_sn,pData+offset,tmpvar); 
offset+=tmpvar; 
tmpvar=sizeof back.train_id; 
memcpy(&back.train_id,pData+offset,tmpvar); 
 
offset=25; 
back.commander_num=*(pData+offset); 
offset++; 
memcpy(back.tran_command_num,pData+offset,sizeof(back.tran_command_num)); 
 
offset=47; 
back.pg=*(pData+offset); 
 
#endif 
 
CByteArray ar; 
for(int i=0;iPostPackToHost(0x06,0x51,0x23,ar.GetData(),ar.GetSize(),TRUE); 
else 
	pMainDlg->PostPackToHost(0x06,0x51,0x5,ar.GetData(),ar.GetSize(),TRUE); 
*/ 
pMainDlg->PostPackToHost(0x06,0x51,0x01,ar.GetData(),ar.GetSize(),TRUE); 
 
} 
 
 
 
UINT CDispatchCmdDlg::OnKeyProc(WPARAM wData, LPARAM lex) 
{ 
	 
	CCirMMIDlg *pMainDlg=(CCirMMIDlg*)m_pFrmWnd; 
	UINT ret=1; 
	 
	 
	FromMcuInfo *pInfo=(FromMcuInfo*)wData; 
	if(NULL==pInfo) 
		return 0;  //error... 
	 
	 
	switch(pInfo->type) 
	{ 
	case 0x20: 
		{ 
			BYTE wKey=pInfo->key[0];		 
			switch(wKey)  
			{ 
			case K_UP: 
				{ 
					//m_editContent.ShowCaret(); 
					m_editContent.SendMessage(WM_KEYDOWN,VK_UP); 
					//m_editContent.HideCaret(); 
					DisplayPageInfo(); 
					UpdateData(FALSE); 
				} 
				break; 
			case K_DOWN: 
				{ 
					//m_editContent.ShowCaret();					 
					m_editContent.SendMessage(WM_KEYDOWN,VK_DOWN);				 
					//m_editContent.HideCaret(); 
					DisplayPageInfo(); 
				} 
				break; 
			case K_LEFT: 
				{ 
					//m_editContent.ShowCaret(); 
					int first=m_editContent.GetFirstVisibleLine(); 
					m_editContent.SendMessage(WM_KEYDOWN,VK_PRIOR); 
					m_editContent.LineScroll(-1,0); 
					int first2=m_editContent.GetFirstVisibleLine();			 
					//m_editContent.HideCaret(); 
					 
					if(first==first2)  //前一条 
					{	 
						if(m_bShowConfirm_Left) 
						{ 
							pMainDlg->m_DlgPopShow.ToShow("请再按此键将获前一条信息",RGB(200,200,0)); 
							m_bShowConfirm_Left=FALSE; 
							break; 
						} 
						if(!m_bReaded) 
						{ 
							m_bReaded=TRUE;	 
						} 
						else 					 
						pMainDlg->PostPackToHost(0x06,0x55,0x01); 
					} 
					DisplayPageInfo(); 
				} 
				break; 
			case K_RIGHT: 
				{ 
					//m_editContent.ShowCaret(); 
					int first=m_editContent.GetFirstVisibleLine(); 
					m_editContent.SendMessage(WM_KEYDOWN,VK_NEXT); 
					m_editContent.LineScroll(1,0); 
					int first2=m_editContent.GetFirstVisibleLine();			 
					//m_editContent.HideCaret(); 
					 
					if(first==first2)  //后一条 
					{ 
						if(m_bShowConfirm_Right) 
						{ 
							pMainDlg->m_DlgPopShow.ToShow("请再按此键将获后一条信息",RGB(200,200,0)); 
							m_bShowConfirm_Right=FALSE; 
							break; 
						} 
						if(!m_bReaded) 
						{ 
							m_bReaded=TRUE;	 
						} 
						else  
							pMainDlg->PostPackToHost(0x06,0x56,0x01); 
					} 
					DisplayPageInfo();	 
					 
				} 
				break; 
			case K_ENTER: 
				{ 
					if(0==m_CurTransCmd.code) 
						break; 
					//PostMcuCommQueue(OPEN_SPEAKER,sizeof OPEN_SPEAKER); 
					//g_Play.Play(PLAY_ALREADY_SIGNIN,1,1); 
					if(!m_bReaded) 
					{ 
						if(g_Play._code!=PLAY_READED_CMD) 
						{ 
						PostMcuCommQueue(OPEN_SPEAKER,sizeof OPEN_SPEAKER); 
						g_Play.Push(); 
						g_Play.Push(PLAY_READED_CMD,1,1); 
						g_Play.StopPlay();											 
						//g_Play.Play(PALY_READED_CMD,1,1); 
						//Sleep(500);						 
						} 
						break; 
					} 
					HandACK(m_CurTransCmd,0x51);						 
					//根据条件加签收时间 
					if(!(m_CurTransCmd.cmd_state & MASK_ASK)) 
					{ 
						PostMcuCommQueue(CLOSE_SPEAKER,sizeof CLOSE_SPEAKER); 
						g_Play.StopPlay(); 
						g_CommonSet.bPlayAudio=FALSE; 
						 
						SetTimer(100,1200,NULL); 
 
						TCHAR timeBuff[80]; 
						INT  timeLen=0; 
						memset(timeBuff,0,sizeof(timeBuff)); 
						CTime t; 
						t=CTime::GetCurrentTime(); 
						wsprintf(timeBuff,L"签收时间:%02d月%02d日%02d时%02d分%02d秒\r\n签收地点:\r\n",t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());  
						timeLen=lstrlen(timeBuff); 
						m_editContent.SetSel(m_editContent.GetWindowTextLength(),-1,TRUE); 
						m_editContent.ReplaceSel(timeBuff); 
						 
						CHAR timeBuff2[80]; 
						INT timeLen2=0; 
						memset(timeBuff2,0,sizeof(timeBuff2)); 
						sprintf(timeBuff2,"签收时间:%02d月%02d日%02d时%02d分%02d秒\r\n签收地点:\r\n",t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());  
						timeLen2=strlen(timeBuff2); 
						memcpy(m_BufferOfPrint.cbBufPrint+m_BufferOfPrint.iTotal,timeBuff2,timeLen2); 
						m_BufferOfPrint.iTotal+=timeLen2; 
						 
						m_CurTransCmd.cmd_state|=MASK_ASK; 
						 
						CString str(L"(已签收)"); 
						/* 
						//是否打印 
						if(m_CurTransCmd.cmd_state & MASK_PRINT) 
							str+=_T(",已打印"); 
						else 
							str+=_T(",未打印"); 
						*/ 
						m_strCmdState=str; 
						m_ctCmdState.SetWindowText(str); 
						 
						//PostMcuCommQueue(OPEN_SPEAKER,sizeof OPEN_SPEAKER); 
						//g_Play.Play(PLAY_ALREADY_SIGNIN,1,1); 
 
						if(IsNeedSave(m_CurTransCmd.code)) 
							m_tmpTransCmd=m_CurTransCmd; 
 
						UpDataQueryUI(m_CurTransCmd); 
						 
					}  
					else 
					{ 
					PostMcuCommQueue(OPEN_SPEAKER,sizeof OPEN_SPEAKER); 
					g_Play.Play(PLAY_ALREADY_SIGNIN,1,1); 
 
					g_CommonSet.bPlayAudio=FALSE; 
					 
					} 
				 
					 
				} 
				break; 
			case 0x5d://调车请求 
				{ 
					if(0x11==m_CurTransCmd.code) 
					{ 
						DCQQ(m_CurTransCmd); 
					} 
				} 
				break; 
			case 0x5c://打印 
				{ 
					if(!(m_CurTransCmd.cmd_state & MASK_ASK))  //未签收前不能进行打印 
						break; 
					if(m_BufferOfPrint.bInvalidate && m_BufferOfPrint.iTotal>0) 
					{ 
						 
						BYTE Buff[2048*2]; 
						INT  iLen=0; 
						iLen=BuildFrame(Buff,0x06,0x20,0x01,0x02,m_BufferOfPrint.cbBufPrint,m_BufferOfPrint.iTotal); 
						if(iLen>0) 
						{ 
							if(iLen==(INT)pMainDlg->m_PrintComm.WriteComm(Buff,iLen)) 
							{ 
								 
							//	m_CurTransCmd.cmd_state|=MASK_PRINT; 
								//if(m_CurTransCmd.cmd_state & MASK_ASK) 
								//	m_strCmdState=_T("已签收"); 
								//else 
							//		m_strCmdState=_T("未签收"); 
							//	m_strCmdState+=_T(",已打印"); 
								 
							//	m_ctCmdState.SetWindowText(m_strCmdState); 
 
								TRANSFER_CMD& tran=m_CurTransCmd; 
								CALLBACK_TRANS back; 
								int i=0; 
								memset(&back,0,sizeof(back)); 
								 
								back.code=tran.code; 
								 
								CTime t=CTime::GetCurrentTime (); 
								back.date_time.date.year=AcsiiToBCD((t.GetYear()%100)); 
								back.date_time.date.month=AcsiiToBCD(t.GetMonth()); 
								back.date_time.date.day=AcsiiToBCD(t.GetDay()); 
								 
								back.date_time.time.hour=AcsiiToBCD(t.GetHour()); 
								back.date_time.time.minute=AcsiiToBCD(t.GetMinute()); 
								back.date_time.time.second=AcsiiToBCD(t.GetSecond()); 
								 
								//memcpy(&back.date_time,&tran.date_time,sizeof(back.date_time)); 
								 
								memcpy(back.train_sn,tran.train_sn,7); 
								for(i=0;i<7;i++) 
									if(!back.train_sn[i]) 
										back.train_sn[i]=0x20; 
									 
									memcpy(back.train_id,tran.train_id,4); 
									for(i=0;i<4;i++) 
										if(!back.train_id[i]) 
											back.train_id[i]=0x20; 
										 
										back.commander_num=tran.cmder_num; 
										memcpy(back.tran_command_num,tran.tran_command_num,6); 
										for(i=0;i<6;i++) 
											if(!back.tran_command_num[i]) 
												back.tran_command_num[i]=0x20; 
											 
											back.pg=tran.sum_pg; 
											 
											CByteArray ar; 
											for(i=0;iPostPackToHost(0x06,0x51,0x01,ar.GetData(),ar.GetSize(),TRUE); 
											 
							} 
							if(iLen>0) 
								MyOutPut(Buff,iLen,SEND_MCU_TYPE); 
 
							 
						} 
					} 
				} 
				break; 
			default: 
				ret=0; 
	} 
	break; 
} 
default: 
	ret=0; 
	break; 
} 
 
return ret; 
} 
 
 
BOOL CDispatchCmdDlg::IsNeedSave(BYTE code) 
{ 
	if(	code>=0x01 && code<=0x06  
	  ||code ==0x11 
	  ||code ==0x20 
	  ||code >=0x18 && code<=0x1f 
	) 
	{ 
		return TRUE; 
	} 
	else 
		return FALSE; 
 
} 
 
 
 
 
void CDispatchCmdDlg::OnTimer(UINT nIDEvent)  
{ 
	// TODO: Add your message handler code here and/or call default 
 
	if(nIDEvent==TM_RETURN_PRE_HAND) 
	{ 
		if(m_tmpTransCmd.code!=0 && (m_tmpTransCmd.cmd_state & MASK_ASK)) 
		{ 
			HandACK(m_tmpTransCmd,0x51); 
			m_tmpTransCmd.Reset(); 
		} 
		KillTimer(nIDEvent); 
	} 
	else if(nIDEvent==100) 
	{ 
		PostMcuCommQueue(OPEN_SPEAKER,sizeof OPEN_SPEAKER); 
		g_Play.Play(PLAY_ALREADY_SIGNIN,1,1); 
		KillTimer(nIDEvent); 
	} 
 
	CDialog::OnTimer(nIDEvent); 
} 
 
 
 
void CDispatchCmdDlg::UpDataQueryUI(TRANSFER_CMD& cmd) 
{ 
 
	CCirMMIDlg *pMainDlg=(CCirMMIDlg*)m_pFrmWnd; 
	INT index=pMainDlg->PeekPrePage(); 
	if(index==-1) 
		return; 
 
	if(pMainDlg->GetWndIndexByID(pMainDlg->m_QueryCmdDlg.IDD)==index) 
	{ 
		pMainDlg->m_QueryCmdDlg.UpDataQueryUI(cmd); 
	 
	} 
}