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

📄 bcmsgdlg.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// BCMsgDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SF1553.h"
#include "BCMsgDlg.h"
#include "MsgTypeDlg.h"
#include "MsgShowDlg.h"

#include <windowsx.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CBCMsgDlg dialog


CBCMsgDlg::CBCMsgDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBCMsgDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBCMsgDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CBCMsgDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBCMsgDlg)
	DDX_Control(pDX, IDC_BCMSG_MSFLEXGRID, m_Grid);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CBCMsgDlg, CDialog)
	//{{AFX_MSG_MAP(CBCMsgDlg)
	ON_BN_CLICKED(IDC_BCMSG_BT_ADD, OnBcmsgBtAdd)
	ON_BN_CLICKED(IDC_BCMSG_BT_DEL, OnBcmsgBtDel)
	ON_BN_CLICKED(IDC_BCMSG_BT_CLEAR, OnBcmsgBtClear)
	ON_BN_CLICKED(IDC_BCMSG_BT_SAVE, OnBcmsgBtSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBCMsgDlg message handlers

void CBCMsgDlg::OnOK() 
{
	// TODO: Add extra validation here

	int i=0, j=0;

	g_MsgsVec.num = g_TempMsgsVec.num;
	for( i = 0; i < MSG_MAX; i++)
	{
		for (j = 0; j < MSGNAME_MAX; j++) // message name
		{
			g_MsgsVec.msgAry[i].msgname[j] = g_TempMsgsVec.msgAry[i].msgname[j];
		}

		g_MsgsVec.msgAry[i].msg.ChannelSelect = g_TempMsgsVec.msgAry[i].msg.ChannelSelect;
		g_MsgsVec.msgAry[i].msg.InterMSGGapTime = g_TempMsgsVec.msgAry[i].msg.InterMSGGapTime;
		g_MsgsVec.msgAry[i].msg.MSGFormat = g_TempMsgsVec.msgAry[i].msg.MSGFormat;
		g_MsgsVec.msgAry[i].msg.RetryEnable = g_TempMsgsVec.msgAry[i].msg.RetryEnable;
		g_MsgsVec.msgAry[i].blocklen = g_TempMsgsVec.msgAry[i].blocklen;


		for (j = 0; j < MSGBLOCKSIZE; j++) // block data
		{
			g_MsgsVec.msgAry[i].msg.MSGBlock[j] = g_TempMsgsVec.msgAry[i].msg.MSGBlock[j];
		}
	}

	MsgClear(&g_TempMsgsVec);
	CDialog::OnOK();
}

BOOL CBCMsgDlg::OnInitDialog() 
{
	int i = 0, j =0;
	CDialog::OnInitDialog();

	// TODO: Add extra initialization here
	m_Grid.SetCols(7);
	m_Grid.SetRows(2);

	m_Grid.SetRow(0);
	m_Grid.SetCol(0); // MSG_NAME
	m_Grid.SetText(TEXT("消息名称"));
	m_Grid.SetColWidth(0, 10*180);
	m_Grid.SetCol(1); // CMD
	m_Grid.SetText(TEXT("指令字"));
	m_Grid.SetColWidth(1, 5*180);
	m_Grid.SetCol(2); // BC_CH
	m_Grid.SetText(TEXT("通道A/B"));
	m_Grid.SetColWidth(2, 5*180);
	m_Grid.SetCol(3); // MSG_Gap
	m_Grid.SetText(TEXT("消息间时间间隔(单位1μs)"));
	m_Grid.SetColWidth(3, 14*180);

	m_Grid.SetCol(4); // DATA
	m_Grid.SetText(TEXT("允许重试"));
	m_Grid.SetColWidth(4, 5*180);


	m_Grid.SetCol(5); // DATA
	m_Grid.SetText(TEXT("数据"));
	m_Grid.SetColWidth(5, 55*180);
	m_Grid.SetCol(6); // NULL
	m_Grid.SetText(TEXT(""));
	m_Grid.SetColWidth(6, 4*180);

	m_Grid.SetColAlignment(0, 0); // col alignment
	m_Grid.SetColAlignment(1, 0); // col alignment
	m_Grid.SetColAlignment(2, 0); // col alignment
	m_Grid.SetColAlignment(3, 0); // col alignment
	m_Grid.SetColAlignment(4, 0); // col alignment
	m_Grid.SetColAlignment(5, 0); // col alignment
	m_Grid.SetColAlignment(6, 0); // col alignment

	m_Grid.SetFixedCols(0); // fixed coloum
	m_Grid.SetFixedRows(1);

	m_Grid.SetSelectionMode(1); // by row
	m_Grid.SetScrollTrack(FALSE); // no scroll track

	m_Grid.SetAllowBigSelection(FALSE);
	m_Grid.SetAllowUserResizing(1); // enable cols resize

	MsgClear(&g_TempMsgsVec);


	g_TempMsgsVec.num = g_MsgsVec.num;

	for (i = 0; i < g_MsgsVec.num; i++)
	{
		for (j = 0; j < MSGNAME_MAX; j++) // message name
		{
			g_TempMsgsVec.msgAry[i].msgname[j] = g_MsgsVec.msgAry[i].msgname[j];
		}

		g_TempMsgsVec.msgAry[i].msg.ChannelSelect = g_MsgsVec.msgAry[i].msg.ChannelSelect;
		g_TempMsgsVec.msgAry[i].msg.InterMSGGapTime = g_MsgsVec.msgAry[i].msg.InterMSGGapTime;
		g_TempMsgsVec.msgAry[i].msg.MSGFormat = g_MsgsVec.msgAry[i].msg.MSGFormat;
		g_TempMsgsVec.msgAry[i].msg.RetryEnable = g_MsgsVec.msgAry[i].msg.RetryEnable;
		g_TempMsgsVec.msgAry[i].blocklen = g_MsgsVec.msgAry[i].blocklen;

		for (j=0; j < MSGBLOCKSIZE; j++) // block data
		{
			g_TempMsgsVec.msgAry[i].msg.MSGBlock[j] = g_MsgsVec.msgAry[i].msg.MSGBlock[j];
		}
	}

	msgChangeType = MSGCTYPE_INIT;

	UpdateMessageList();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CBCMsgDlg::UpdateMessageList()
{
	int len=0;
	int cnt=0;
	int i=0, j=0, k=0;
	char c[256];
	char s[80];
	BYTE msgtype = 0;
	int m=0, n=0;

	memset(c, 0, sizeof(c));


	len = g_TempMsgsVec.num;
	cnt = len;

	itoa(len, s, 10);
	::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_BCMSG_ED_MSGCNT), s);

	if (len==0)
	{
		this->m_Grid.SetRows(2);
		j = this->m_Grid.GetCols();
		this->m_Grid.SetRow(1);
		for (i=0; i<j; i++)
		{
			this->m_Grid.SetCol(i);
			this->m_Grid.SetText(TEXT(""));
		}
		return;
	}

	//	create list GUI
	//
	switch (msgChangeType)
	{
		case MSGCTYPE_INIT:
			i = 0;
			break;

		case MSGCTYPE_ADD:
			i = len-1;
			break;

		case MSGCTYPE_MODIFY:
			if (modifyid >= 0)
			{
				i = modifyid;
				len = i+1;
			}
			else
			{
				i = 0;
			}
			break;

		case MSGCTYPE_NONE:
			return;
			break;

		default:
			i = 0;
			break;
	}

	m_Grid.SetRows(cnt+1); // len + 1 fixed row
	while ( i < len) //for (i=0; i<len; i++)
	{
		m_Grid.SetRow(i+1); // set row, message idx
		msgtype = g_TempMsgsVec.msgAry[i].msg.MSGFormat; // get message type
		m_Grid.SetCol(0); // MSG_NAME
		strcpy(c, g_TempMsgsVec.msgAry[i].msgname);
		m_Grid.SetText(TEXT(c));

		m_Grid.SetCol(1); // CMD
		if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT)
		{
			sprintf(c, "%04x/%04x", g_TempMsgsVec.msgAry[i].msg.MSGBlock[0], g_TempMsgsVec.msgAry[i].msg.MSGBlock[1]);
		}
		else
		{
			sprintf(c, "%04x", g_TempMsgsVec.msgAry[i].msg.MSGBlock[0]);
		}
		m_Grid.SetText(TEXT(c));


		m_Grid.SetCol(2); // BC_CH
		if (g_TempMsgsVec.msgAry[i].msg.ChannelSelect==0)
		{
			m_Grid.SetText(TEXT("B"));
		}
		else
		{
			m_Grid.SetText(TEXT("A"));
		}

		m_Grid.SetCol(3); // MSG_Gap
		sprintf(c, "%d", g_TempMsgsVec.msgAry[i].msg.InterMSGGapTime);
		m_Grid.SetText(TEXT(c));

		m_Grid.SetCol(4); // Retry enable
		if(g_TempMsgsVec.msgAry[i].msg.RetryEnable)
		{
			m_Grid.SetText(TEXT("是"));
		}
		else
		{
			m_Grid.SetText(TEXT("否"));
		}
		
		m_Grid.SetCol(5); // DATA
		if (g_TempMsgsVec.msgAry[i].blocklen>0)
		{
			memset(c, 0, sizeof(c));
			sprintf(s, "%04x", g_TempMsgsVec.msgAry[i].msg.MSGBlock[0]);
			strcpy(c, s);
			for (j = 1; j < g_TempMsgsVec.msgAry[i].blocklen; j++)
			{
				sprintf(s, " %04x", g_TempMsgsVec.msgAry[i].msg.MSGBlock[j]);
				strcat(c, s);
			}
			m_Grid.SetText(TEXT(c));
		}
		else
		{
			m_Grid.SetText("");
		}

		m_Grid.SetCol(6); // NULL
		m_Grid.SetText(TEXT(""));
		i++;
	}

}

BEGIN_EVENTSINK_MAP(CBCMsgDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CBCMsgDlg)
	ON_EVENT(CBCMsgDlg, IDC_BCMSG_MSFLEXGRID, -601 /* DblClick */, OnDblClickBcmsgMsflexgrid, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CBCMsgDlg::OnDblClickBcmsgMsflexgrid() 
{
	// TODO: Add your control notification handler code here
	LONG x=0, y=1;
	CString str;
	INT idx=0;
	INT i=0;
	CHAR szTempMsgName[MSGNAME_MAX];

	y = m_Grid.GetRowSel();
	idx = y-1;

	m_Grid.SetCol(x);
	m_Grid.SetRow(y);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -