📄 rtdatadlg.cpp
字号:
// RTDataDlg.cpp : implementation file
//
#include "stdafx.h"
#include "sf1553.h"
#include "RTDataDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRTDataDlg dialog
static int oldrt=0, oldsa=0;
CRTDataDlg::CRTDataDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRTDataDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRTDataDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CRTDataDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRTDataDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRTDataDlg, CDialog)
//{{AFX_MSG_MAP(CRTDataDlg)
ON_BN_CLICKED(IDC_RTD_BT_LOADF, OnRtdBtLoadf)
ON_BN_CLICKED(IDC_RTD_BT_SAVEF, OnRtdBtSavef)
ON_CBN_SELCHANGE(IDC_RTD_CB_RTSEL, OnSelchangeRtdCbRtsel)
ON_EN_CHANGE(IDC_RTD_ED_BASED, OnChangeRtdEdBased)
ON_CBN_SELCHANGE(IDC_RTD_CB_CNT, OnSelchangeRtdCbCnt)
ON_CBN_SELCHANGE(IDC_RTD_CB_SASEL, OnSelchangeRtdCbSasel)
ON_BN_CLICKED(IDC_RTD_BT_GRD, OnRtdBtGrd)
ON_BN_CLICKED(IDC_RTD_BT_GOD, OnRtdBtGod)
ON_EN_KILLFOCUS(IDC_RTD_ED_BASED, OnKillfocusRtdEdBased)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRTDataDlg message handlers
void CRTDataDlg::OnOK()
{
// TODO: Add extra validation here
int i=0, j=0, k=0;
this->SaveConf();
for (i=0; i<32; i++)
{
for (j=0; j<30; j++)
{
g_RTMsgs.len[i][j] = 0;
for (k=0; k<32; k++)
{
g_RTMsgs.data[i][j][k] = 0;
}
}
}
// Store Values
//
for (i=0; i<32; i++)
{
for (j=0; j<30; j++)
{
g_RTMsgs.len[i][j] = g_TempRTMsgs.len[i][j];
for (k = 0; k<(g_RTMsgs.len[i][j]); k++)
{
g_RTMsgs.data[i][j][k] = g_TempRTMsgs.data[i][j][k];
}
}
}
#ifndef SOFT_DEBUG
// Setup Card
//
if (g_CardHandle != NULL)
{
for (i=0; i<32; i++)
{
for (j=0; j<30; j++)
{
RT_SendMSG(g_CardHandle, i, j+1, g_RTMsgs.len[i][j], g_RTMsgs.data[i][j]);
}
}
}
else
{
// demo mode
}
#endif
CDialog::OnOK();
}
void CRTDataDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
void CRTDataDlg::OnRtdBtLoadf()
{
// TODO: Add your control notification handler code here
FILE *pf;
CString strpath;
char flag[8];
memset(flag, 0, sizeof(flag));
CFileDialog OpenDlg(TRUE, TEXT(".rdt"), TEXT("RT Data.rdt"),
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
TEXT("RT数据配置文件 (*.rdt)|*.rdt||"), NULL);
if ((OpenDlg.DoModal())!=IDOK)
{
return;
}
strpath = OpenDlg.GetPathName(); // create file
pf = fopen(strpath, "r+b");
if (pf==NULL)
{
MessageBox("打开文件失败!", "错误", MB_OK | MB_ICONERROR);
return;
}
if (fread(flag, sizeof(char), 4, pf)!=4) // read message Head flag
{
fclose(pf);
MessageBox("加载RT数据配置文件失败!", "错误", MB_OK | MB_ICONERROR);
return;
}
else
{
if (strcmp(flag, "RTDT")!=0)
{
fclose(pf);
MessageBox("非RT数据配置文件类型!", "错误", MB_OK | MB_ICONERROR);
return;
}
}
fread(&g_TempRTMsgs, sizeof(g_TempRTMsgs), 1, pf);
fclose(pf); // close file
this->ShowConf();
}
void CRTDataDlg::OnRtdBtSavef()
{
// TODO: Add your control notification handler code here
FILE *pf;
CString strpath;
CFileDialog OpenDlg(FALSE, TEXT(".rdt"), TEXT("RT Data.rdt"),
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
TEXT("RT数据配置文件 (*.rdt)|*.rdt||"), NULL);
if ((OpenDlg.DoModal())!=IDOK)
{
return;
}
this->OnSelchangeRtdCbRtsel();
strpath = OpenDlg.GetPathName(); // create file
pf = fopen(strpath, "w+b");
if (pf==NULL)
{
MessageBox("创建文件失败!", "错误", MB_OK | MB_ICONERROR);
return;
}
fwrite("RTDT", sizeof(char), 4, pf); // write message Head flag
fwrite(&g_TempRTMsgs, sizeof(g_TempRTMsgs), 1, pf);
fclose(pf); // close file
}
BOOL CRTDataDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
int i=0, j=0, k=0;
char c[80];
/////////////////////////////
// Init GUI
// RT Addr Sel
ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_RTSEL));
for (i = 0; i < RT_ADDR_MAX; i++)
{
itoa(i, c, 10);
ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_RTSEL), TEXT(c));
}
// SA Addr Sel
ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_SASEL));
for (i = 1; i < (RT_ADDR_MAX-1); i++)
{
itoa(i, c, 10);
ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_SASEL), TEXT(c));
}
// Word Count
ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT));
for (i=0; i< 33; i++)
{
itoa(i, c, 10);
ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT), TEXT(c));
}
// Limit edit control Text length
//
for (i=0; i<32; i++)
{
Edit_LimitText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), 4);
}
Edit_LimitText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), 4); // base value
// Resume Values
//
for (i=0; i<32; i++)
{
for (j=0; j<30; j++)
{
g_TempRTMsgs.len[i][j] = g_RTMsgs.len[i][j];
for (k=0; k<32; k++)
{
g_TempRTMsgs.data[i][j][k] = g_RTMsgs.data[i][j][k];
}
}
}
oldrt = 0;
oldsa = 0;
this->ShowConf();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CRTDataDlg::ShowConf()
{
int i=0, j=0;
char c[80];
ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_RTSEL), oldrt);
ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_SASEL), oldsa);
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), TEXT("0"));
j = g_TempRTMsgs.len[oldrt][oldsa];
ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT), j);
for (i=0; i<32; i++)
{
sprintf(c, "%04x", g_TempRTMsgs.data[oldrt][oldsa][i]);
strupr(c);
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), c);
if (i<j)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), TRUE);
}
else
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), FALSE);
}
}
}
void CRTDataDlg::SaveConf()
{
int i=0, j=0;
char c[80];
j = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT));
g_TempRTMsgs.len[oldrt][oldsa] = j;
for (i=0; i<32; i++)
{
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), c, sizeof(c));
g_TempRTMsgs.data[oldrt][oldsa][i] = (WORD)HEXS(c);
}
}
void CRTDataDlg::OnSelchangeRtdCbRtsel()
{
// TODO: Add your control notification handler code here
int i=0, j=0;
char c[80];
int irt=0, isa=0;
irt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_RTSEL));
isa = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_SASEL));
// Store Confiure
//
j = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT));
g_TempRTMsgs.len[oldrt][oldsa] = j;
for (i=0; i<32; i++)
{
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), c, sizeof(c));
g_TempRTMsgs.data[oldrt][oldsa][i] = (WORD)HEXS(c);
}
// Resume Configure
//
oldrt = irt;
oldsa = isa;
j = g_TempRTMsgs.len[oldrt][oldsa];
ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT), j);
for (i=0; i<32; i++)
{
sprintf(c, "%04x", g_TempRTMsgs.data[oldrt][oldsa][i]);
strupr(c);
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), c);
if (i<j)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), TRUE);
}
else
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), FALSE);
}
}
}
void CRTDataDlg::OnChangeRtdEdBased()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
char c[80], s[80];
char tc='\0';
int i=0;
int l=0, j=0;
BOOL isErr=FALSE;
DWORD dw=0;
l = Edit_LineLength(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), -1);
if (l==0)
return;
memset(s, 0, sizeof(s));
memset(c, 0, sizeof(c));
dw = Edit_GetSel(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED));
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), c, sizeof(c)); // get data string with HEX
// analyze data string with HEX
//
j=0;
for (i=0; i<l; i++)
{
tc = c[i];
if (((tc>='a')&&(tc<='f'))||((tc>='0')&&(tc<='9'))||((tc>='A')&&(tc<='F')))
{
s[j] = tc;
j++;
}
else
{
isErr=TRUE;
}
}
if (!isErr)
return;
// write back the HEX value
//
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), TEXT(s));
Edit_SetSel(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), HIWORD(dw)-1, HIWORD(dw)-1);
}
void CRTDataDlg::OnSelchangeRtdCbCnt()
{
// TODO: Add your control notification handler code here
int i=0, j=0;
j = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT));
for (i=0; i<32; i++)
{
if (i<j)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), TRUE);
}
else
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), FALSE);
}
}
}
void CRTDataDlg::OnSelchangeRtdCbSasel()
{
// TODO: Add your control notification handler code here
this->OnSelchangeRtdCbRtsel();
}
void CRTDataDlg::OnRtdBtGrd()
{
// TODO: Add your control notification handler code here
int i=0, j=0;
char c[80];
WORD wd=0;
j = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT));
if ((j>0)&&(j<=32))
{
for (i=0; i<j; i++)
{
wd = (WORD)rand();
sprintf(c, "%04x", wd);
strupr(c);
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), c);
}
}
}
void CRTDataDlg::OnRtdBtGod()
{
// TODO: Add your control notification handler code here
int i=0, j=0;
char c[80];
WORD wd=0;
j = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTD_CB_CNT));
if ((j>0)&&(j<=32))
{
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), c, sizeof(c));
wd = (WORD)::HEXS(c);
for (i=0; i<j; i++)
{
sprintf(c, "%04x", wd);
strupr(c);
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_DATA0+i), c);
wd++;
}
}
}
void CRTDataDlg::OnKillfocusRtdEdBased()
{
// TODO: Add your control notification handler code here
if (Edit_LineLength(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), -1)==0)
{
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTD_ED_BASED), TEXT("0"));
}
}
BOOL CRTDataDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
WORD wlow=0, whigh=0;
HWND hWnd=(HWND)lParam;
wlow = LOWORD(wParam); // retrieve ID of control
if ((wlow>=IDC_RTD_ED_DATA0) && (wlow<=IDC_RTD_ED_DATA31))
{
whigh = HIWORD(wParam); // retrieve notify message of control
if (whigh == EN_CHANGE) // on edit changed
{
char c[80], s[80];
char tc='\0';
int i=0;
int l=0, j=0;
BOOL isErr=FALSE;
DWORD dw=0;
l = Edit_LineLength(hWnd, -1);
if (l==0)
return CDialog::OnCommand(wParam, lParam);
memset(s, 0, sizeof(s));
memset(c, 0, sizeof(c));
dw = Edit_GetSel(hWnd);
::GetWindowText(hWnd, c, sizeof(c)); // get data string with HEX
// analyze data string with HEX
//
j=0;
for (i=0; i<l; i++)
{
tc = c[i];
if (((tc>='a')&&(tc<='f'))||((tc>='0')&&(tc<='9'))||((tc>='A')&&(tc<='F')))
{
s[j] = tc;
j++;
}
else
{
isErr=TRUE;
}
}
if (!isErr)
return CDialog::OnCommand(wParam, lParam);
// write back the HEX value
//
::SetWindowText(hWnd, TEXT(s));
Edit_SetSel(hWnd, HIWORD(dw)-1, HIWORD(dw)-1);
}
if (whigh == EN_KILLFOCUS) // on edit kill focus
{
if (Edit_LineLength(hWnd, -1)==0)
{
::SetWindowText(hWnd, TEXT("0"));
}
else
{
char c[80];
memset(c, 0, sizeof(c));
::GetWindowText(hWnd, c, sizeof(c));
strupr(c);
::SetWindowText(hWnd, TEXT(c));
}
}
}
return CDialog::OnCommand(wParam, lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -