📄 comdlg.cpp
字号:
data.pop_front();
}
}else
data.pop_front();
}
if((is == TRUE)&&(data.size()>5)){
length= data.at(3)*256+data.at(4);
i=3;
int num=0;
while(is ){
if(data.at(i) == 0XFF&&((i+2)<data.size())){
if(data.at(i+1)==0XFF&&data.at(i+2)==0XFB){
data.erase(data.begin(),(data.begin()+i-1));
is =FALSE;
}
}
if(is&&data[i] == 0XFB&&(i+1)<data.size()){
if(data[i+1] == 0XFB&&(num == length+3)){
sum = sum - data[i-1];
is = FALSE;
correct = TRUE;
}else if(data[i+1] == 0XFB&&(num != length+3)){
data.erase(data.begin(),(data.begin()+i));
is = FALSE;
}else{
sum += data[i];
num++;
if(num > (length+4)){
data.erase(data.begin(),(data.begin()+i-1));
correct = FALSE;
is = FALSE;
}
}
}else if(is == TRUE){
sum += data[i];
num++;
if(num > (length+4)){
data.erase(data.begin(),(data.begin()+i-1));
correct = FALSE;
is = FALSE;
}
}
if(is&&(i==(data.size()-1))){
is = FALSE;
next = TRUE;
}
i++;
}
if(correct){
sum = sum % 256;
if(sum == data.at(length+5)&&(data.at(length+6)==0XFB)&&(data.at(length+7)==0XFB)){
for(i=0;i<(length+8);i++){
Output[i] = data.at(0);
r.Format("%02X ",Output[i]);
recvStr += r;
data.pop_front();
}
display = TRUE;
}else{
data.erase(data.begin(),(data.begin()+length+7));
}
if(!data.empty()){
retr = TRUE;
is = FALSE;
correct = FALSE;
}
}else if(!data.empty()&&next){
retr = FALSE;
}else
retr = TRUE;
}else
retr = FALSE;
}
if(display == TRUE){
return TRUE;
}else{
return FALSE;
}
}
void CComDlg::OnButtonCloseport()
{
// TODO: Add your control notification handler code here
fEventRun=FALSE;
WaitForSingleObject(hThreadEvent,INFINITE);
CloseHandle(hThreadEvent);
CloseHandle(m_hCom);
m_btnClosePort.EnableWindow(FALSE);
m_btnSend.EnableWindow(FALSE);
m_btnConfig.EnableWindow(TRUE);
}
void CComDlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_strSend!="") {
Writecom(m_strSend);
m_strSend += "\15\12";
m_editReceive.ReplaceSel("send: "+m_strSend); //to update display
}
else
MessageBox("please input data!");
}
void CComDlg::OnButtonConfig()
{
// TODO: Add your control notification handler code here
CString strStatus,strTemp;
if(myconfig.DoModal()==IDOK)
{
UpdateData(TRUE);
switch (myconfig.m_intPort)
{
case 0:
{
strStatus="COM1";
myCom="COM1";
break;
}
case 1:
{
strStatus="COM2";
myCom="COM2";
break;
}
case 2:
{
strStatus="COM3";
myCom="COM3";
break;
}
case 3:
{
strStatus="COM4";
myCom="COM4";
break;
}
case 4:
{
strStatus="COM5";
myCom="COM5";
}
break;
case 5:
{
strStatus="COM6";
myCom="COM6";
}
break;
case 6:
{
strStatus="COM7";
myCom="COM7";
break;
}
case 7:
{
strStatus="COM8";
myCom="COM8";
break;
}
case 8:
{
strStatus="COM9";
myCom="COM9";
break;
}
}
strStatus+=",";
switch(myconfig.m_intBaud)
{
case 0:
{
strStatus+="38400";
myBaudRate=CBR_38400;
break;
}
case 1:
{
strStatus+="19200";
myBaudRate=CBR_19200;
break;
}
case 2:
{
strStatus+="9600";
myBaudRate=CBR_9600;
break;
}
case 3:
{
strStatus+="4800";
myBaudRate=CBR_4800;
break;
}
case 4:
{
strStatus+="2400";
myBaudRate=CBR_2400;
break;
}
case 5:
{
strStatus+="1200";
myBaudRate=CBR_1200;
break;
}
}
strStatus+=",";
switch(myconfig.m_intParity)
{
case 0:
{
myfParity=FALSE;
myParity=NOPARITY;
strStatus+="N";
break;
}
case 1:
{
myfParity=TRUE;
myParity=ODDPARITY;
strStatus+="O";
break;
}
case 2:
{
myfParity=TRUE;
myParity=EVENPARITY;
strStatus+="E";
break;
}
case 3:
{
myfParity=TRUE;
myParity=MARKPARITY;
strStatus+="M";
break;
}
case 4:
{
myfParity=TRUE;
myParity=SPACEPARITY;
strStatus+="S";
break;
}
}
strStatus+=",";
myByteSize=myconfig.m_intData+5;
strTemp.Format("%d",myByteSize);
strStatus+=strTemp;
strStatus+=",";
switch(myconfig.m_intStop)
{
case 0:
{
strStatus+="1";
myStopBits=ONESTOPBIT;
break;
}
case 1:
{
strStatus+="1.5";
myStopBits=ONE5STOPBITS;
break;
}
case 2:
{
strStatus+="2";
myStopBits=TWOSTOPBITS;
break;
}
}
strStatus="COM___"+strStatus;
this->SetWindowText(strStatus);
UpdateData(FALSE);
m_btnOpenPort.EnableWindow(TRUE);
m_btnClosePort.EnableWindow(FALSE);
m_btnConfig.EnableWindow(FALSE);
}
}
void CComDlg::Writecom(CString strInput)
{
UpdateData(TRUE);
int length;
DWORD dwErrorFlags;
COMSTAT ComStat;
BYTE MySendByte[1000];
DWORD nLength=0;
length=ConvertString(m_strSend,MySendByte);
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
BOOL fState=WriteFile(m_hCom,MySendByte,length,&nLength,&Wol);
if(!fState)
{
ULONG my_error=GetLastError();
if(my_error==ERROR_IO_PENDING)
{
GetOverlappedResult(m_hCom,&Wol,&nLength,TRUE);
}
else
nLength=0;
}
}
void CComDlg::OnButtonC()
{
// TODO: Add your control notification handler code here
SetFocus();
m_editReceive.SetSel(0,-1);
m_editReceive.Clear();
m_editSend.Clear();
}
char CComDlg::ConvertSingleChar(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
AfxMessageBox("Please input the number from '0' to '9' or the character from '/A/a' to 'F/f' ");
return -1;
}
int CComDlg::ConvertString(CString str, BYTE SendData[])
{
int highhexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
for(int i=0;i<len;)
{
char lstr,hstr=str[i];
if(hstr==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
lstr=str[i];
highhexdata=ConvertSingleChar(hstr);
lowhexdata=ConvertSingleChar(lstr);
if((highhexdata==16)||(lowhexdata==16))
break;
else
highhexdata=highhexdata*16+lowhexdata;
i++;
SendData[hexdatalen]=(char)highhexdata;
hexdatalen++;
}
return hexdatalen;
}
HBRUSH CComDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_EDIT)
pDC->SetTextColor(RGB(0,0,255));
if(nCtlColor== CTLCOLOR_LISTBOX)
{
HBRUSH m_hbrush;
m_hbrush=CreateSolidBrush(RGB(0,0,0));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
return m_hbrush;
}
CBrush m_cBrush;
m_cBrush.CreateSolidBrush(RGB(0,255,255));
switch(nCtlColor)
{
case CTLCOLOR_DLG:
pDC->SetBkMode(TRANSPARENT);
break;
case CTLCOLOR_STATIC:
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(0,255,255));
break;
}
DeleteObject(m_cBrush);
// TODO: Return a different brush if the default is not desired
return hbr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -