📄 tdramdlg.cpp
字号:
break;
default:
AfxMessageBox("本程序只支持8、7、6三种长度的数据位!");
break;
}
CString str;
str.Format("%d,%c,%d,%d",m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
m_ctrlComm.SetSettings(str);
m_strComStatus.Format("%s Opened,%d,%c,%d,%d",m_strPort,m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
pComStatus->SetWindowText(m_strComStatus);
}
}
void CTDRAMDlg::OnSelchangeComboStopbits()
{
// TODO: Add your control notification handler code here
CEdit *pComStatus=(CEdit*)GetDlgItem(IDC_EDIT_STATUS);
if(!m_bFlagCom)
{
AfxMessageBox("端口已关闭!");
pComStatus->SetWindowText("COM Port Closed");
}
else
{
switch(m_ctrlStopBits.GetCurSel())
{
case 0:
m_nStopBits=1;
break;
case 1:
m_nStopBits=2;
break;
default:
AfxMessageBox("本程序只支持1、2两种长度的停止位!");
break;
}
CString str;
str.Format("%d,%c,%d,%d",m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
m_ctrlComm.SetSettings(str);
m_strComStatus.Format("%s Opened,%d,%c,%d,%d",m_strPort,m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
pComStatus->SetWindowText(m_strComStatus);
}
}
BEGIN_EVENTSINK_MAP(CTDRAMDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CTDRAMDlg)
ON_EVENT(CTDRAMDlg, IDC_MSCOMM, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CTDRAMDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[1024]; //设置数组
CString strtemp;
CEdit *pRXData=(CEdit*)GetDlgItem(IDC_EDIT_RXDATA);
m_nCommEvent=m_ctrlComm.GetCommEvent();
if(m_nCommEvent==2) //接收缓冲区有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k); //将VARIANT型变量转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为CString型变量,并送入接收对话框
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%02X ",bt);
m_strRXData+=strtemp;
}
pRXData->SetWindowText(m_strRXData);
}
// else if(m_ctrlComm.GetCommEvent()==1009) //奇偶校验错误
// AfxMessageBox("数据有误,请重传!");
// else
// AfxMessageBox("程序出错,请关闭程序!");
}
void CTDRAMDlg::OnButtonClosecom()
{
// TODO: Add your control notification handler code here
CWinApp *pApp=AfxGetApp();
HICON hIcon;
CEdit *pComStatus=(CEdit*)GetDlgItem(IDC_EDIT_STATUS);
if(m_bFlagCom)
{
GetDlgItem(IDC_BUTTON_CLOSECOM)->SetWindowText(_T("打开串口"));
hIcon=pApp->LoadIcon(IDI_ICON_COMOFF);
m_ctrlDisplay.SetIcon(hIcon);
m_ctrlComm.SetPortOpen(FALSE);
pComStatus->SetWindowText("COM Port Closed");
m_bFlagCom=FALSE;
}
else
{
GetDlgItem(IDC_BUTTON_CLOSECOM)->SetWindowText(_T("关闭串口"));
hIcon=pApp->LoadIcon(IDI_ICON_COMON);
m_ctrlDisplay.SetIcon(hIcon);
m_ctrlComm.SetPortOpen(TRUE);
m_strComStatus.Format("%s Opened,%d,%c,%d,%d",m_strPort,m_nBaud,m_cParity,m_nDataBits,m_nStopBits);
pComStatus->SetWindowText(m_strComStatus);
m_bFlagCom=TRUE;
}
}
void CTDRAMDlg::OnButtonCleartx()
{
// TODO: Add your control notification handler code here
m_ctrlComm.SetOutBufferCount(0); //清空发送缓冲区
CEdit *pTXData=(CEdit*)GetDlgItem(IDC_EDIT_TXDATA);
m_strTXData.Empty(); //清空发送框
pTXData->SetWindowText(m_strTXData);
}
void CTDRAMDlg::OnButtonClearrx()
{
// TODO: Add your control notification handler code here
m_ctrlComm.SetInBufferCount(0); //清空发送缓冲区
CEdit *pRXData=(CEdit*)GetDlgItem(IDC_EDIT_RXDATA);
m_strRXData.Empty(); //清空发送框
pRXData->SetWindowText(m_strRXData);
}
void CTDRAMDlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
m_ctrlComm.SetOutBufferCount(0); //清空发送缓冲区
m_ctrlComm.SetInBufferCount(0); //清空接收缓冲区
CByteArray hexdata;
int len=String2Hex(m_strTXData,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata)); //发送信号
//////////////////////////////////////////////
// m_strRXData=m_strTXData;
// CEdit *pRXData=(CEdit*)GetDlgItem(IDC_EDIT_RXDATA);
// pRXData->SetWindowText(m_strRXData);
}
//这是一个将字符转换为相应的十六进制值的函数
//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1
char CTDRAMDlg::Char2Hex(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else return (-1);
}
int CTDRAMDlg::String2Hex(CString str, CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
senddata.SetSize(len/2);
for(int i=0;i<len;)
{
char lstr,hstr=str[i];
if(hstr==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
lstr=str[i];
hexdata=Char2Hex(hstr);
lowhexdata=Char2Hex(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
senddata[hexdatalen]=(char)hexdata;
hexdatalen++;
}
senddata.SetSize(hexdatalen);
return hexdatalen;
}
/*void CTDRAMDlg::OnChangeEditTxdata()
{
// 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
CEdit *pTXData=(CEdit*)GetDlgItem(IDC_EDIT_TXDATA);
pTXData->GetWindowText(m_strTXData);
int len = m_strTXData.GetLength();
if(m_nTXData < 0)
m_nTXData = 0;
if(m_nTXData > 6000)
m_nTXData = 6000;
m_nSData = m_nTXData/24;
binData.SetSize(1);
binData[0]=(char)m_nSData;
UpdateData(FALSE);
}*/
void CTDRAMDlg::OnStop()
{
int len;
CByteArray hexdata;
if(m_nStart == 1)
{
m_strCommand = _T("10");
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
m_nStart = 0;
}
}
void CTDRAMDlg::OnChangeTxdata()
{
// 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
CEdit *pTXData=(CEdit*)GetDlgItem(IDC_TXDATA);
pTXData->GetWindowText(m_strTXData);
int nTXData;
BYTE nHexData;
nTXData = atoi(LPCTSTR(m_strTXData));
if(nTXData < 0)
nTXData = 0;
if(nTXData > 6000)
nTXData = 6000;
nHexData = nTXData/24;
binData.SetSize(1);
binData[0]=(char)m_nSData;
}
void CTDRAMDlg::OnBegin()
{
int len;
CByteArray hexdata;
if(m_nStart == 0)
{
m_nStart = 1;
m_ctrlComm.SetOutput(COleVariant(binData)); //发送信号
if(m_Speed == 0)
{
m_strCommand = _T("50");
}
else
{
m_strCommand = _T("60");
}
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
if(m_Control == 0)
{
m_strCommand = _T("70");
}
else
{
m_strCommand = _T("80");
}
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
if(m_CW == 0)
{
m_strCommand = _T("30");
}
else
{
m_strCommand = _T("40");
}
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}
}
void CTDRAMDlg::OnOK()
{
// TODO: Add your control notification handler code here
CDialog::OnOK();
}
void CTDRAMDlg::OnCw()
{
// TODO: Add your control notification handler code here
int len;
CByteArray hexdata;
if(m_nStart == 1)
{
m_strCommand = _T("30");
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}
}
void CTDRAMDlg::OnCcw()
{
// TODO: Add your control notification handler code here
int len;
CByteArray hexdata;
if(m_nStart == 1)
{
m_strCommand = _T("40");
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}
}
void CTDRAMDlg::OnFast()
{
// TODO: Add your control notification handler code here
int len;
CByteArray hexdata;
if(m_nStart == 1)
{
m_strCommand = _T("50");
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}
}
void CTDRAMDlg::OnSlow()
{
// TODO: Add your control notification handler code here
int len;
CByteArray hexdata;
if(m_nStart == 1)
{
m_strCommand = _T("60");
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}
}
void CTDRAMDlg::OnInterior()
{
// TODO: Add your control notification handler code here
int len;
CByteArray hexdata;
if(m_nStart == 1)
{
m_strCommand = _T("70");
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}
}
void CTDRAMDlg::OnExterior()
{
// TODO: Add your control notification handler code here
int len;
CByteArray hexdata;
if(m_nStart == 1)
{
m_strCommand = _T("80");
len=String2Hex(m_strCommand,hexdata);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -