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

📄 msgshowdlg.cpp

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

	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 + -