📄 msgshowdlg.cpp
字号:
if ((msgtype&FMSG_MC) == FMSG_MC) // Mode Code
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
j = ::OwnModeCode(cmd1);
switch (j)
{
// no data | broadcast | mode code
//case 0: // dync bus control
case 1: // sync (no data)
//case 2: // transmit last status word (no data)
case 3: // initialize self-test
case 4: // transmit shut-down
case 5: // override shut-down
case 6: // inhibit terminal flag bits
case 7: // override inhibit terminal flag bits
case 8: // reset terminal
break;
// with data | broadcast | mode code
//case 16: // transmit vector word
case 17: // sync (with data)
//case 18: // transmit last command word (with data)
//case 19: // transmit sefl-test word
case 20: // selected transmitor shut-down
case 21: // inhibit selected transmitor shut-down
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0), TRUE);
break;
default: // reserved
break;
}
}
else
{
if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT) // RT-RT
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
}
else
{
if (::OwnTR(cmd1)==0)
{
k = ::OwnWordCount(cmd1);
if (k>0)
{
for (j=0; j<32; j++)
{
if (j<k)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), TRUE);
}
else
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
}
}
else
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), TRUE);
}
}
}
else
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
}
}
}
cmd1 = ::SetWordCount(cmd1, i);
this->SetCmdWord(cmd1, 0);
}
short CMsgShowDlg::GetWordCount(unsigned char id)
{
short rt=0;
if (id==0)
{
rt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT0));
}
else
{
rt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT1));
}
return rt;
}
void CMsgShowDlg::OnSelchangeMshowCbDcnt1()
{
// TODO: Add your control notification handler code here
short i=0;
i = this->GetWordCount(1);
cmd2 = ::SetWordCount(cmd2, i);
this->SetCmdWord(cmd2, 1);
}
void CMsgShowDlg::OnSelchangeMshowCbRort0()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
short i=0, j=0, k=0;
WORD msgtype=0;
msgtype = g_TempMsg.msg.MSGFormat;
i = this->GetTR(0);
cmd1 = ::SetTR(cmd1, i);
if (i==0) // R
{
if ((msgtype&FMSG_MC) == FMSG_MC)
{
j = ::OwnModeCode(cmd1);
switch (j)
{
// no data | broadcast | mode code
//case 0: // dync bus control
case 1: // sync (no data)
//case 2: // transmit last status word (no data)
case 3: // initialize self-test
case 4: // transmit shut-down
case 5: // override shut-down
case 6: // inhibit terminal flag bits
case 7: // override inhibit terminal flag bits
case 8: // reset terminal
break;
// with data | broadcast | mode code
//case 16: // transmit vector word
case 17: // sync (with data)
//case 18: // transmit last command word (with data)
//case 19: // transmit sefl-test word
case 20: // selected transmitor shut-down
case 21: // inhibit selected transmitor shut-down
{
for (k=0; k<32; k++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+k), FALSE);
}
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0), TRUE);
}
break;
default: // reserved
break;
}
}
else
{
j = ::OwnWordCount(cmd1);
if (j==0)
{
for (k=0; k<32; k++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+k), TRUE);
}
}
else
{
for (k=0; k<32; k++)
{
if (k<j)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+k), TRUE);
}
else
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+k), FALSE);
}
}
}
}
}
else // T
{
for (k=0; k<32; k++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+k), FALSE);
}
}
cmd1 = ::SetTR(cmd1, i);
this->SetCmdWord(cmd1, 0);
}
short CMsgShowDlg::GetTR(unsigned char id)
{
short rt=0;
if (id==0)
{
rt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0));
}
else
{
rt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT1));
}
return rt;
}
void CMsgShowDlg::OnSelchangeMshowCbRort1()
{
// TODO: Add your control notification handler code here
short i=0;
i = this->GetTR(1);
cmd2 = ::SetTR(cmd2, i);
this->SetCmdWord(cmd2, 1);
}
void CMsgShowDlg::OnSelchangeMshowCbRtaddr0()
{
// TODO: Add your control notification handler code here
short i=0;
i = this->GetRTAddr(0);
cmd1 = ::SetRTAddr(cmd1, i);
if (i<31)
{
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_BCAST))==BST_CHECKED)
{
Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_BCAST), BST_UNCHECKED);
this->OnMshowCkBcast();
}
}
else
{
// broadcast
//
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_BCAST))==BST_UNCHECKED)
{
Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_BCAST), BST_CHECKED);
this->OnMshowCkBcast();
}
}
cmd1 = ::SetRTAddr(cmd1, i);
this->SetCmdWord(cmd1, 0);
}
void CMsgShowDlg::OnSelchangeMshowCbRtaddr1()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
short i=0;
i = this->GetRTAddr(1);
cmd2 = ::SetRTAddr(cmd2, i);
this->SetCmdWord(cmd2, 1);
}
void CMsgShowDlg::OnSelchangeMshowCbSaaddr0()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
short i=0, j=0, k=0;
WORD msgtype=0;
msgtype = g_TempMsg.msg.MSGFormat;
i = this->GetSubAddr(0);
cmd1 = ::SetSubAddr(cmd1, i);
if ((i>0)&&(i<31))
{
if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT) // RT-RT
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
}
else
{
if (::OwnTR(cmd1)==0)
{
k = ::OwnWordCount(cmd1);
if (k>0)
{
for (j=0; j<32; j++)
{
if (j<k)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), TRUE);
}
else
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
}
}
else
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), TRUE);
}
}
}
else
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
}
}
// Sub Addr is 1 to 30 ==> Sub Addr
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_MCODE))!=BST_UNCHECKED)
{
Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_MCODE), BST_UNCHECKED);
this->OnMshowCkMcode();
}
}
else
{
// Sub Addr is 31 or 0 ==> Mode Code
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_MCODE))==BST_UNCHECKED)
{
Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_MCODE), BST_CHECKED);
this->OnMshowCkMcode();
}
if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT) // RT-RT
{
for (j=0; j<32; j++)
{
::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+j), FALSE);
}
}
}
cmd1 = ::SetSubAddr(cmd1, i);
this->SetCmdWord(cmd1, 0);
}
short CMsgShowDlg::GetSubAddr(unsigned char id)
{
short rt=0;
if (id==0)
{
rt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR0));
}
else
{
rt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR1));
}
return rt;
}
void CMsgShowDlg::OnSelchangeMshowCbSaaddr1()
{
// TODO: Add your control notification handler code here
short i=0;
i = this->GetSubAddr(1);
cmd2 = ::SetSubAddr(cmd2, i);
this->SetCmdWord(cmd2, 1);
}
void CMsgShowDlg::OnOK()
{
// TODO: Add extra validation here
int i=0, rt=0;
char c[256];
WORD msgtype=0;
memset(c, 0, sizeof(c));
// check message's name
//
if (Edit_LineLength(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MNAME), -1)==0)
{
MessageBox(TEXT("请输入消息名称!"), TEXT("警告"), MB_OK | MB_ICONWARNING);
return;
}
// get message's name
//
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MNAME), g_TempMsg.msgname, sizeof(g_TempMsg.msgname));
// get Channel Selecte
//
if (ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_CHSEL))==0)
{
g_TempMsg.msg.ChannelSelect = 1; // A selected
}
else
{
g_TempMsg.msg.ChannelSelect = 0; // B selected
}
// retry if message error
//
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_RTYEN))!=BST_UNCHECKED)
{
g_TempMsg.msg.RetryEnable = TRUE;
}
else
{
g_TempMsg.msg.RetryEnable = FALSE;
}
// get Gap
//
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MINT), c, sizeof(c));
g_TempMsg.msg.InterMSGGapTime = (DWORD)atol(c);
// Message Block
//
msgtype = g_TempMsg.msg.MSGFormat;
for (i = 0; i < MSGBLOCKSIZE; i++)
{
g_TempMsg.msg.MSGBlock[i] = 0;
}
g_TempMsg.blocklen = 0;
if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT)
{
//?
g_TempMsg.blocklen = 4;
g_TempMsg.msg.MSGBlock[0] = cmd1;
g_TempMsg.msg.MSGBlock[1] = cmd2;
g_TempMsg.blocklen = 0;
for (i = 0; i < 32; i++)
{
if (::IsWindowEnabled(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i)))
{
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), c, sizeof(c));
g_TempMsg.msg.MSGBlock[i+4] = (WORD)::HEXS(c);
g_TempMsg.blocklen++;
}
else
{
i = 32;
}
}
}
else
{
g_TempMsg.msg.MSGBlock[0] = cmd1;
g_TempMsg.blocklen = 1;
for (i=0; i<32; i++)
{
if (::IsWindowEnabled(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i)))
{
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), c, sizeof(c));
g_TempMsg.msg.MSGBlock[i+1] = (WORD)::HEXS(c);
g_TempMsg.blocklen++;
}
else
{
i = 32;
}
}
}
// find message in message queue and Add it
//
modifyid = -1;
rt = MsgAdd(&g_TempMsgsVec, &g_TempMsg, 0);// isn't forced
switch (rt)
{
case 0: // Message Overflow Error
MessageBox(TEXT("消息总量超出,无法添加消息到列表!"), TEXT("信息提示"), MB_OK | MB_ICONEXCLAMATION);
msgChangeType = MSGCTYPE_NONE;
break;
case -1: // channel No. Error
// don't warry
break;
case -2: // find same message, but not needn't modify
sprintf(c, "发现同名消息{%s},确认更新该消息吗?", g_TempMsg.msgname);
if (MessageBox(TEXT(c), TEXT("信息提示"), MB_OKCANCEL | MB_ICONEXCLAMATION)==IDOK)
{
modifyid = MsgAdd(&g_TempMsgsVec, &g_TempMsg, 1);
msgChangeType = MSGCTYPE_MODIFY;
}
else
{
return;
}
break;
case -3: // message name is NULL
// don't warry
break;
default: // OK
msgChangeType = MSGCTYPE_ADD;
break;
}
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -