📄 bcmsgdlg.cpp
字号:
// 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 + -