📄 dlgconfig.cpp
字号:
// DlgConfig.cpp : implementation file
//
#include "stdafx.h"
#include "pcm120.h"
#include "DlgConfig.h"
#include "DlgASk2.h"
#include "DlgStateDisplay.h"
#include "DirDialog.h"
#include "fileanddir.h"
#include "CheckState.h"
#include "DlgAllStaSet.h"
#include "afxtempl.h"
#include "ColorListBox.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define GRAY RGB(129,129,129)
#define GREEN RGB(86,222,100)
#define RED RGB(255,0,0)
#define YELLOW RGB(255,128,255)
#define BLUE RGB(0,0,255)
#define BLACK RGB(0,0,0)
/////////////////////////////////////////////////////////////////////////////
// CDlgConfig dialog
CString CDlgConfig::strSent="";
int CDlgConfig::iState=0;
CString StrReceive="";
CString strDir;//方案路径
int nCntPlan=0;//已有方案个数
CStringArray straPlan;//方案名数组
CStringArray straTs;//每路的32个时隙
CStringArray staTsStr;//所有时隙串
CStringArray staTsBin;//所有时隙(二进制串)
int iCntRecord=0;
CStdioFile sfMessTemp;//存放每次的配置文件
int CDlgConfig::nSel1=-1;
int CDlgConfig::nSel2=-1;
int CDlgConfig::nSel3=-1;
int CDlgConfig::nSel4=-1;
CDlgConfig::CDlgConfig(CWnd* pParent /*=NULL*/)
: CDialog(CDlgConfig::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgConfig)
m_strNote = _T("");
m_strRXData = _T("");
m_strTXData = _T("");
m_iATR = 1;
m_iCmd = 0;
//}}AFX_DATA_INIT
}
void CDlgConfig::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgConfig)
DDX_Control(pDX, IDC_LIST_AIM3, m_CtrAim3);
DDX_Control(pDX, IDC_LIST_AIM4, m_CtrAim4);
DDX_Control(pDX, IDC_LIST_AIM2, m_CtrAim2);
DDX_Control(pDX, IDC_LIST_AIM1, m_CtrAim1);
DDX_Control(pDX, IDC_LIST_PLAN, m_CtrlListPlan);
DDX_Control(pDX, IDC_LIST_SOURCE4, m_CtrSourceD);
DDX_Control(pDX, IDC_LIST_SOURCE3, m_CtrSourceC);
DDX_Control(pDX, IDC_LIST_SOURCE2, m_CtrSourceB);
DDX_Control(pDX, IDC_LIST_SOURCE1, m_CtrSourceA);
DDX_Text(pDX, IDC_EDIT_NOTE, m_strNote);
DDX_Text(pDX, IDC_EDIT_RXDATA, m_strRXData);
DDX_Text(pDX, IDC_EDIT_TXDATA, m_strTXData);
DDX_Radio(pDX, IDC_RADIO_ATR, m_iATR);
DDX_Radio(pDX, IDC_RADIO_CMD, m_iCmd);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgConfig, CDialog)
//{{AFX_MSG_MAP(CDlgConfig)
ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
ON_BN_CLICKED(IDC_BUTTON_MANUALSEND, OnButtonManualsend)
ON_BN_CLICKED(IDC_BTN_OK, OnBtnOk)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_PLAN, OnDblclkListPlan)
ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
ON_BN_CLICKED(IDC_BTN_RIGHTATO1, OnBtnRightato1)
ON_BN_CLICKED(IDC_BTN_RIGHTATO2, OnBtnRightato2)
ON_BN_CLICKED(IDC_BTN_RIGHTATO3, OnBtnRightato3)
ON_BN_CLICKED(IDC_BTN_RIGHTATO4, OnBtnRightato4)
ON_BN_CLICKED(IDC_BTN_RIGHTBTO1, OnBtnRightbto1)
ON_BN_CLICKED(IDC_BTN_RIGHTBTO2, OnBtnRightbto2)
ON_BN_CLICKED(IDC_BTN_RIGHTBTO3, OnBtnRightbto3)
ON_BN_CLICKED(IDC_BTN_RIGHTBTO4, OnBtnRightbto4)
ON_BN_CLICKED(IDC_BTN_RIGHTCTO1, OnBtnRightcto1)
ON_BN_CLICKED(IDC_BTN_RIGHTCTO2, OnBtnRightcto2)
ON_BN_CLICKED(IDC_BTN_RIGHTCTO3, OnBtnRightcto3)
ON_BN_CLICKED(IDC_BTN_RIGHTCTO4, OnBtnRightcto4)
ON_BN_CLICKED(IDC_BTN_RIGHTDTO1, OnBtnRightdto1)
ON_BN_CLICKED(IDC_BTN_RIGHTDTO2, OnBtnRightdto2)
ON_BN_CLICKED(IDC_BTN_RIGHTDTO3, OnBtnRightdto3)
ON_BN_CLICKED(IDC_BTN_RIGHTDTO4, OnBtnRightdto4)
ON_BN_CLICKED(IDC_BTN_1LEFT, OnBtn1left)
ON_BN_CLICKED(IDC_BTN_2LEFT, OnBtn2left)
ON_BN_CLICKED(IDC_BTN_3LEFT, OnBtn3left)
ON_BN_CLICKED(IDC_BTN_4LEFT, OnBtn4left)
ON_WM_TIMER()
ON_WM_CLOSE()
ON_LBN_DBLCLK(IDC_LIST_AIM1, OnDblclkListAim1)
ON_LBN_SELCHANGE(IDC_LIST_AIM1, OnSelchangeListAim1)
ON_LBN_SELCHANGE(IDC_LIST_AIM2, OnSelchangeListAim2)
ON_LBN_SELCHANGE(IDC_LIST_AIM3, OnSelchangeListAim3)
ON_LBN_SELCHANGE(IDC_LIST_AIM4, OnSelchangeListAim4)
ON_LBN_DBLCLK(IDC_LIST_AIM2, OnDblclkListAim2)
ON_LBN_DBLCLK(IDC_LIST_AIM3, OnDblclkListAim3)
ON_LBN_DBLCLK(IDC_LIST_AIM4, OnDblclkListAim4)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgConfig message handlers
CString strPage;//发送的报文
CString strGetAim,strGetSource,strGetATR,strCMD;//获得界面上设置的源地址,目的地址,命令
void CDlgConfig::OnButtonManualsend()
{
OnBtnOk();
// TODO: Add your control notification handler code here
CDlgConfig::iState=2;//准备要发送数据;
CCheckState::bAuto=false;
//////////////////////////////////////////////////////////////////////////
CDlgAllStaSet dlgalstaset;
CString strPath;
char Get[255];
dlgalstaset.GetModulePath(strPath,NULL);
strPath+="config.ini";
GetPrivateProfileString("Com",CDlgStateDisplay::strAddress,"1",Get,255,strPath);
UINT uiCom=(UINT)atoi(Get);
//////////////////////////////////////////////////////////////////////////
OnButtonOpenport(uiCom);
UpdateData(true);
for(int its=127;its>=0;its--)
{
m_strTXData.Replace(staTsStr.GetAt(its),staTsBin.GetAt(its));
}
m_strRXData="";
UpdateData(false);
UpdateData(true);
// CString strSent;//最终发送的内容
if(m_iATR==-1)
{
AfxMessageBox("请选择一种命令属性");
return;
}
CDlgASK Dlgask;
CString strCMd;
CString strLastConfig;
switch(m_iCmd)
{
case 0:
strCMD="00";
strCMd="上行";
break;
case 1:
strCMD="01";
strCMd="下行";
break;
default:
strCMD="00";
break;
}
strGetAim=CDlgStateDisplay::strAddress;
strGetSource=CDlgStateDisplay::strAddress;
if(m_iATR==0)
{
m_strTXData="";
UpdateData(false);
UpdateData(true);
// CDlgConfig::iState=1;
strGetATR="00";//询问
CDlgConfig::strSent.Format("7E 81 %s %s %s %s 00",strGetAim,strGetAim,strGetATR,strCMD);
//strSent如果有内容就进行发送;
if(m_Port.m_hComm==NULL)
{
AfxMessageBox("发送不成功,请重试");
return;
}
else
{
char data[2048];
int len=Str2Hex(strSent,data);
m_Port.WriteToPort(data,len);
}
SetTimer(3,1000,NULL);//等1秒后取接收内容
return;
}
if(m_iATR==1)
{
// CDlgConfig::iState=1;
strGetATR="03";//配置
char hexdata[2048];//编辑框中的内容转成的十六进制串
int len=Str2Hex(m_strTXData,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数
if(len!=128)
{
AfxMessageBox("配置无效");
return;
}
CDlgConfig::strSent.Format("7E 81 %s %s %s %s %02X %s",strGetAim,strGetAim,strGetATR,strCMD,len,m_strTXData);//组织要发送的源文
// CDlgConfig::iState=2;
strPage=m_strTXData;
if(m_Port.m_hComm==NULL)
{
AfxMessageBox("发送不成功,请重试");
return;
}
else
{
char data[2048];
int lenTemp=Str2Hex(strSent,data);
m_Port.WriteToPort(data,lenTemp);
}
WriteConfig(CDlgConfig::strSent);
/*
//////////////////////////如果与上一次 的配置不一样,就要记到日志里////////////////////////////////////////////////
char Getjch[500];//取得交叉设置的上一次设置的内容char;
GetLogPath();
GetPrivateProfileString("default",strGetAim+strCMd+"交叉连接","",Getjch,500,strLogPath);
CString StrGetjch;//取得交叉设置的上一次设置的内容CString;
StrGetjch=Getjch;
if(strSent.Compare(StrGetjch)!=0)
{
WritePrivateProfileString(strCurTime,strGetAim+strCMd+"交叉连接",strSent,strLogPath);
WritePrivateProfileString("default",strGetAim+strCMd+"交叉连接",strSent,strLogPath);
}
*/
//////////////////////////恢复listBox里的最初状态////////////////////////////////////////////////
int iCountSourceA =m_CtrSourceA.GetCount();
int iCountSourceB =m_CtrSourceB.GetCount();
int iCountSourceC =m_CtrSourceC.GetCount();
int iCountSourceD =m_CtrSourceD.GetCount();
int iCountAim1=m_CtrAim1.GetCount();
int iCountAim2=m_CtrAim2.GetCount();
int iCountAim3=m_CtrAim3.GetCount();
int iCountAim4=m_CtrAim4.GetCount();
if(iCountAim4!=0||iCountAim3!=0||iCountAim2!=0||iCountAim1!=0||iCountSourceA!=32||iCountSourceB!=32||iCountSourceC!=32||iCountSourceD!=32)
{
InitListBox();
}
UpdateData(false);
//////////////////////////////////////////////////////////////////////////
Sleep(1000);//发送完等1秒后取发查询串
if(Dlgask.DoModal()==IDOK)
{
m_strRXData="";
strSent.Format("7E 81 %s %s 00 00 00",strGetAim,strGetAim);
char data[2048];
int len=Str2Hex(strSent,data);
m_Port.WriteToPort(data,len);
// SetTimer(1,idelay,NULL);
SetTimer(1,1000,NULL);
}
}
else
{
return;
}
}
BOOL CDlgConfig::OnInitDialog()
{
CDialog::OnInitDialog();
//////////////////////////////////////////////////////////////////////////
CString strPath;
CDlgAllStaSet dlgalstaset;
dlgalstaset.GetModulePath(strPath,NULL);
CString strConfigaPath;
strConfigaPath=strPath+"config.ini";
char charGedelay[255];
GetPrivateProfileString("General","延时(毫秒)","1000",charGedelay,255,strConfigaPath);
idelay=atoi((LPTSTR)charGedelay);;
//////////////////////////////////////////////////////////////////////////
CDlgConfig::iState=1;
// TODO: Add extra initialization here
ReadPlan();
// TODO: Add extra initialization here
CStdioFile sfAdd;
CComboBox *ComBoxCom=(CComboBox*)GetDlgItem(IDC_COMBO_COM);
InitListBox();
/*
for(int t=0;t<8;t++)
{
CString strTempTs;
for(int j=0;j<10;j++)
{
strTempTs.Format("%d%d",t,j);
staTsBin.Add(strTempTs);
}
strTempTs.Format("%dA",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dB",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dC",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dD",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dE",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dF",t);
staTsBin.Add(strTempTs);
}
CString strts;
for(int tsA=0;tsA<32;tsA++)
{
strts.Format("ATS%d",tsA);
m_CtrSourceA.AddString(strts);
staTsStr.Add(strts);
}
for(int tsB=0;tsB<32;tsB++)
{
strts.Format("BTS%d",tsB);
m_CtrSourceB.AddString(strts);
staTsStr.Add(strts);
}
for(int tsC=0;tsC<32;tsC++)
{
strts.Format("CTS%d",tsC);
m_CtrSourceC.AddString(strts);
staTsStr.Add(strts);
}
for(int tsD=0;tsD<32;tsD++)
{
strts.Format("DTS%d",tsD);
m_CtrSourceD.AddString(strts);
staTsStr.Add(strts);
}
*/
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgConfig::InitListBox()
{
for(int t=0;t<8;t++)
{
CString strTempTs;
for(int j=0;j<10;j++)
{
strTempTs.Format("%d%d",t,j);
staTsBin.Add(strTempTs);
}
strTempTs.Format("%dA",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dB",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dC",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dD",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dE",t);
staTsBin.Add(strTempTs);
strTempTs.Format("%dF",t);
staTsBin.Add(strTempTs);
}
CString strts;
for(int tsA=0;tsA<32;tsA++)
{
strts.Format("ATS%d",tsA);
m_CtrSourceA.AddString(strts);
staTsStr.Add(strts);
}
for(int tsB=0;tsB<32;tsB++)
{
strts.Format("BTS%d",tsB);
m_CtrSourceB.AddString(strts);
staTsStr.Add(strts);
}
for(int tsC=0;tsC<32;tsC++)
{
strts.Format("CTS%d",tsC);
m_CtrSourceC.AddString(strts);
staTsStr.Add(strts);
}
for(int tsD=0;tsD<32;tsD++)
{
strts.Format("DTS%d",tsD);
m_CtrSourceD.AddString(strts);
staTsStr.Add(strts);
}
////////////////////////////删除目的地址//////////////////////////////////////////////
int icnAim1=m_CtrAim1.GetCount();
if(icnAim1>0)
{
for(int i=0;i<icnAim1;i++)
{
m_CtrAim1.DeleteString(0);
}
}
int icnAim2=m_CtrAim2.GetCount();
if(icnAim2>0)
{
for(int i=0;i<icnAim2;i++)
{
m_CtrAim2.DeleteString(0);
}
}
int icnAim3=m_CtrAim3.GetCount();
if(icnAim3>0)
{
for(int i=0;i<icnAim3;i++)
{
m_CtrAim3.DeleteString(0);
}
}
int icnAim4=m_CtrAim4.GetCount();
if(icnAim4>0)
{
for(int i=0;i<icnAim4;i++)
{
m_CtrAim4.DeleteString(0);
}
}
UpdateData(false);
}
void CDlgConfig::ReadPlan()
{
DWORD dwStyle =m_CtrlListPlan.GetExtendedStyle();
m_CtrlListPlan.SetExtendedStyle(dwStyle|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = 150;
lvc.iSubItem = 0;
lvc.pszText = "方案";
m_CtrlListPlan.InsertColumn(0,&lvc);
lvc.iSubItem = 1;
lvc.cx = 150;
lvc.pszText = "注释";
m_CtrlListPlan.InsertColumn(1,&lvc);
// char * pDir= new char[80];
// GetCurrentDirectory(80,pDir);
CDlgAllStaSet dlgalstaset;
dlgalstaset.GetModulePath(strLogPath,NULL);
strDir=(LPCTSTR)strLogPath;
strDir+="plan\\";
CStringArray straList;
CFileAndDir filedlg;
nCntPlan=0;
filedlg.RansackDirectoryEx(strDir,straList,nCntPlan);
for(int i=0;i<nCntPlan;i++)
{
CString strPlanName;
CString strTemp;
strPlanName=straList.GetAt(i);
strTemp =strPlanName;
strTemp.Replace(strDir,"");
strTemp.Replace(".txt","");
strTemp.Replace("\\","");
straPlan.Add(strTemp);
int j;
j=m_CtrlListPlan.InsertItem(0,strTemp);
CStdioFile fPlan;
if(fPlan.Open(strPlanName,CFile::modeRead))
{
CString strNote;
fPlan.ReadString(strNote);
if(strNote.Find("[")!=-1)
{
m_CtrlListPlan.SetItemText(j,1,strNote);
}
}
fPlan.Close();
}
}
void CDlgConfig::OnBtnOk()
{
// TODO: Add your control notification handler code here
//UpdateData(true);
UpdateData(true);
m_strTXData="";
UpdateData(false);
int iCountAim1;
CString strListTemp1;
iCountAim1=m_CtrAim1.GetCount();
for(int iAim1=0;iAim1<iCountAim1;iAim1++)
{
m_CtrAim1.GetText(iAim1,strListTemp1);
m_strTXData+=strListTemp1+" ";
}
int iCountAim2;
CString strListTemp2;
iCountAim2=m_CtrAim2.GetCount();
for(int iAim2=0;iAim2<iCountAim2;iAim2++)
{
m_CtrAim2.GetText(iAim2,strListTemp2);
m_strTXData+=strListTemp2+" ";
}
int iCountAim3;
CString strListTemp3;
iCountAim3=m_CtrAim3.GetCount();
for(int iAim3=0;iAim3<iCountAim3;iAim3++)
{
m_CtrAim3.GetText(iAim3,strListTemp3);
m_strTXData+=strListTemp3+" ";
}
int iCountAim4;
CString strListTemp4;
iCountAim4=m_CtrAim4.GetCount();
for(int iAim4=0;iAim4<iCountAim4;iAim4++)
{
m_CtrAim4.GetText(iAim4,strListTemp4);
m_strTXData+=strListTemp4+" ";
}
m_strTXData.TrimRight(" ");
UpdateData(false);
}
void CDlgConfig::OnDblclkListPlan(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(true);
for(int i=0;i<m_CtrlListPlan.GetItemCount();i++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -