📄 mymodemdlg.cpp
字号:
memset(strCommRecvMsg,0,51);
BYTE bCommRecvMsg[51];
memset(bCommRecvMsg,0,51);
DWORD dw;
BOOL b=ReadFile(hCommDev,strCommRecvMsg,50,&dw,NULL);
if(!b)return;
if(dw<1)return;
CString str,s;
UpdateData(1);
if(dw==1)
{
if(g_nFirst==1)
{
c[0]=(char)g_sFirst;
c[1]=(char)strCommRecvMsg[0];
wsprintf(cc,_T("%s"),g_dbf.CharToWideChar((unsigned char*)c,2));
g_nFirst=0;
g_sFirst=0;
m_sReceive+=cc;
UpdateData(0);
}
else//g_nFirst==0
{
if(IsChinesecharacter(strCommRecvMsg[0]))
{
g_sFirst=strCommRecvMsg[0];
g_nFirst=1;
}
else
{
m_sReceive+=(TCHAR)strCommRecvMsg[0];
UpdateData(0);
g_nFirst=0;
g_sFirst=0;
}
}
}
else//dw>1
{
if(g_nFirst==1)
{
c[0]=(char)g_sFirst;
c[1]=(char)strCommRecvMsg[0];
memcpy(bCommRecvMsg,strCommRecvMsg+1,dw-1);
ProcessChar(bCommRecvMsg,dw-1,str);
wsprintf(cc,_T("%s"),g_dbf.CharToWideChar((unsigned char*)c,2));
m_sReceive+=cc;
m_sReceive+=str;
UpdateData(0);
g_nFirst=0;
g_sFirst=0;
}
else
{
ProcessChar(strCommRecvMsg,dw,str);
m_sReceive+=str;
UpdateData(0);
g_nFirst=0;
g_sFirst=0;
}
}*/
CDialog::OnTimer(nIDEvent);
}
void CMyModemDlg::OnDestroy()
{
KillTimer(1);
CDialog::OnDestroy();
}
void CMyModemDlg ::ProcessChar(BYTE* bb,int len,CString& str)
{
str=_T("");
BYTE temp;
int i=0;
while(i<len)
{
temp=bb[i];
if(!IsChinesecharacter(temp))
{
str+=(TCHAR)temp;
i++;
}
else
{
i++;
if(i<len)
{
c[0]=(char)temp;
c[1]=(char)bb[i];
wsprintf(cc,_T("%s"),g_dbf.CharToWideChar((unsigned char*)c,2));
str+=cc;
i++;
}
}
}
}
BOOL CMyModemDlg ::IsChinesecharacter(BYTE ch)
{
if((BYTE)ch>=0x80)
return TRUE;
else
return FALSE;
}
/*void CMyModemDlg::OnChangeEdit3()
{
// 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
}*/
/*void CMyModemDlg::OnButton1()
{
//
}*/
/*void CMyModemDlg::OnButton2()
{
// TODO: Add your control notification handler code here
TCHAR cs[200];
wsprintf(cs,_T("%s"),g_dbf.CharToWideChar((unsigned char*)ReceiveBuf,actNumber));
m_sReceive+=cs;
m_sReceive=Recs;
UpdateData(0);
}
void CMyModemDlg::OnButton3()
{
UpdateData(1);
DCB PortDCB;
PortDCB.DCBlength = sizeof (DCB);
// Get the default port setting information.
GetCommState (hCommDev, &PortDCB);
// Change the DCB structure settings.
PortDCB.BaudRate = m_baud;
PortDCB.fBinary = TRUE; // Binary mode; no EOF check
PortDCB.fParity = TRUE; // Enable parity checking
PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
PortDCB.fDtrControl = DTR_CONTROL_ENABLE;
// DTR flow control type
PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity
PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx
PortDCB.fOutX = FALSE; // No XON/XOFF out flow control
PortDCB.fInX = FALSE; // No XON/XOFF in flow control
PortDCB.fErrorChar = FALSE; // Disable error replacement
PortDCB.fNull = FALSE; // Disable null stripping
PortDCB.fRtsControl = RTS_CONTROL_ENABLE;
// RTS flow control
PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on
// error
PortDCB.ByteSize = 8; // Number of bits/byte, 4-8
PortDCB.Parity = NOPARITY; // 0-4=no,odd,even,mark,space
PortDCB.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2
// Configure the port according to the specifications of the DCB
// structure.
if (!SetCommState (hCommDev, &PortDCB))
{
// Could not create the read thread.
::MessageBox (NULL, TEXT("Unable to configure the serial port"),
TEXT("Error"), MB_OK);
//return FALSE;
}
}
void CMyModemDlg::OnButton4()
{
// m_sReceive="";
Recs="";
m_sReceive=Recs;
UpdateData(0);
}*/
void CMyModemDlg::OnReceive(WPARAM wParam,LPARAM lParam)
{
CString ss;
char vv[3],kk[6],jj[3],jf[6],xxx[3],yyy[3];
ss="";
TCHAR Weidu[3],Weiduf[6],Jingdu[3],Jingf[6],zbx[3],zby[3];
//AfxMessageBox(E);
ss+=Recs;
Recs="";//清空缓存
if(ss=="") return;
//HReceive[RCounter]+=ss;
//AfxMessageBox(Recs);
if(ss.GetAt(26)=='N')
m_NS="北";
else m_NS="南";
for(int i1=16;i1<=18;i1++)
{
//Weidu[i1-16]=ss.GetAt(i1);
vv[i1-16]=char(ss.GetAt(i1));
}
wsprintf(Weidu,_T("%s"),g_dbf.CharToWideChar((unsigned char*)vv,2));
for(int i2=19;i2<25;i2++)
{
//Weiduf[i2-19]=ss.GetAt(i2);
kk[i2-19]=char(ss.GetAt(i2));
}
wsprintf(Weiduf,_T("%s"),g_dbf.CharToWideChar((unsigned char*)kk,6));
if(ss.GetAt(39)=='W')
m_WE="西";
else m_WE="东";
for(int i3=28;i3<31;i3++)
{
//Jingdu[i3-28]=ss.GetAt(i3);
// m_showj.SetAt(i3-28,ss.GetAt(i3));
jj[i3-28]=char(ss.GetAt(i3));
}
wsprintf(Jingdu,_T("%s"),g_dbf.CharToWideChar((unsigned char*)jj,3));
for(int i4=32;i4<38;i4++)
{
jf[i4-32]=char(ss.GetAt(i4));
}
wsprintf(Jingf,_T("%s"),g_dbf.CharToWideChar((unsigned char*)jf,6));
//aa=Jingdu;
m_showj=Jingdu;
m_showjf=Jingf;
m_showw=Weidu;
m_wx=Weiduf;
JD[RCounter]=int(StrtoNumF(m_showj));
WD[RCounter]=3*int(StrtoNumF(m_showw));
RCounter= RCounter+1;
//AfxMessageBox(m_showw);
//AfxMessageBox(Weidu);
//AfxMessageBox(HReceive[RCounter-1]);
UpdateData(0);
///////////////////////描点
// dc->SetPixel(CPoint(20,20),RGB(255,0,0));
CDC* dc=m_pic.GetDC();
CPen penNew,pen2;
CBrush BrushBack,BrushBack1;
//POINT OrPoint;
CRect rectClient;
m_pic.GetClientRect(&rectClient);
PostMessage(WM_MOVE,0,0);
//RedrawWindow(&rectClient,NULL,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
//CRect rectDraw(rectClient.righ,255,rectClient.right-15,615);
BrushBack.CreateSolidBrush(RGB(150,255,100));
dc->SelectObject(&BrushBack);
penNew.CreatePen(PS_SOLID,1,RGB(255,0,0));
dc->SelectObject(&penNew);
//dc->Rectangle(rectClient);
dc->SetBkMode(TRANSPARENT);
for(int i=0;i<RCounter;i++)
{
if(i==0)
{
dc->MoveTo(JD[i],WD[i]);
continue;
}
if(i==RCounter-1)
{
dc->LineTo(JD[i],WD[i]);
CRect rr(JD[i],WD[i],JD[i]+10,WD[i]+10);
dc->Ellipse(rr);
continue;
}
dc->LineTo(JD[i],WD[i]);
}
//int xx,yy;
/*for(int i5=23;i5<=25;i5++)
{
xxx[i5-23]=char(ss.GetAt(i5));
}
wsprintf(zbx,_T("%d"),g_dbf.CharToWideChar((unsigned char*)jf,6));
for(int i6=36;i5<=38;i6++)
{
xxx[i5-36]=char(ss.GetAt(i6));
}
wsprintf(zby,_T("%d"),g_dbf.CharToWideChar((unsigned char*)jf,6));
for(int i=0;i<RCounter;i++)
{
dc->SetPixel(CPoint(xx,yy),RGB(0,255,0));
//
AfxMessageBox(zby);
AfxMessageBox(zbx);
}*/
}
double CMyModemDlg::StrtoNumF(CString str)
{
// for(int i=0;)
int len=str.GetLength();
int k=0;
double rel=0.0;
double tt;
char aa,bb,cc;
//确定小数点
for(int i=0;i<len;i++)
{
cc=char(str.GetAt(i));
if(!(((cc>=48)&&(cc<=57))||(cc=='.')))
{return 0.0;}
if(cc=='.')
{k=i;break;}
}
if(k!=0)//double型
{//计算整数部分
for(int j=0;j<k;j++)
{
aa=char(str.GetAt(j));
rel=rel*10+atoi(&aa);
}
//计算小数部分
for(int m=k+1;m<len;m++)
{
bb=char(str.GetAt(m));
tt=atoi(&bb)*1.0;
for(int n=0;n<m-k;n++)
tt=tt*0.1;
rel=rel+tt;
}
}
else//int型
{
for(int l=0;l<len;l++)
{
aa=char(str.GetAt(l));
rel=rel*10+atoi(&aa);
}
}
return rel;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -