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

📄 mymodemdlg.cpp

📁 eVC串口通讯+GPS定位信息显示. 不错的原码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 + -