⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtdatadlg.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 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 + -