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);
}
}