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

📄 projectpmudlg.cpp

📁 VC++6.0基于CAN协议的车辆控制
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                           	CString min = time.Mid(2,2);
							//AfxMessageBox(min);
                        	CString sec = time.Mid(4,2);
//AfxMessageBox(sec);
                        	char *phour = new char[2];

                           	strcpy(phour,hour);
                         	int vhour =atoi(phour);
                        	if(vhour>16)
							{
								AfxMessageBox("小时无效");
		                      	m_strPortRXData2.Empty();
		                       	break;
							}

                         	char *pmin = new char[2];
                           	strcpy(pmin,min);
                           	int vmin = atoi(pmin);
                        	if(vmin>60)
							{
								AfxMessageBox("分>60无效");
		                      	m_strPortRXData2.Empty();
		                       	break;
							}
                           	char *psec = new char[2];
                           	strcpy(psec,sec);
                        	int vsec = atoi(psec);
                        	if(vsec>60)
							{
								AfxMessageBox("秒>60无效");
		                      	m_strPortRXData2.Empty();
		                       	break;
							}
                          	DeleteObject(phour);
                         	DeleteObject(pmin);
                          	DeleteObject(psec);

							CString timevalue;
							timevalue.Format("%d:%d:%d",(vhour+8)%23,vmin,vsec);
							m_time1=timevalue;
						//	AfxMessageBox(timevalue);
*/
						    //经纬度是否有效 A=有效定位,V=无效定位 
							commaa = commab;
							commab = m_strPortRXData2.Find(comma,commaa+1);

					    	//m_sb = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							if(m_strPortRXData2.Mid(commaa+1,commab-commaa-1)=="V")
							{
							//	AfxMessageBox("无效");
								SetDlgItemText(IDC_STATIC_GPSSTATE_TEXT, "A"); 
		                      	m_strPortRXData2.Empty();
		                       	break;
							}
							else
							{
								SetDlgItemText(IDC_STATIC_GPSSTATE_TEXT, "V");
							}

                            //纬度
					    	commaa = commab;
				    		commab = m_strPortRXData2.Find(comma,commaa+1);
                            //m_sc = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							CString weiinfo = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							CString weidegree = weiinfo.Mid(0,2);
							CString weiminute = weiinfo.Mid(2,7);
							SetDlgItemText(IDC_STATIC_WD_TEXT, weiinfo);
							char *pwdeg = new char[2];
							strcpy(pwdeg,weidegree);
							int wdeg = atoi(pwdeg);
							char *pwmin = new char[2];
							strcpy(pwmin,weiminute);
							double wmin = atof(pwmin);
							double valuewei = wdeg+wmin/60;
						//	CString weivalue;
						//	weivalue.Format("%d--%d--%f",wdeg,wmin,wsec);
                          	DeleteObject(pwdeg);
                         	DeleteObject(pwmin);
						//	AfxMessageBox("weivalue   "+weivalue);
					//	    AfxMessageBox(m_sc);

							//纬度半球N(北半球)或S(南半球)
				    		commaa = commab;
				    		commab = m_strPortRXData2.Find(comma,commaa+1);
                           // m_sd = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);

                           //经度
				    		commaa = commab;
				    	    commab = m_strPortRXData2.Find(comma,commaa+1);
                         //   m_se = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
                            CString ss = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);

							

                        	CString jinginfo = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							CString jingdegree = jinginfo.Mid(0,3);
							CString jingminute = jinginfo.Mid(3,7);
							SetDlgItemText(IDC_STATIC_JD_TEXT, jinginfo);
							char *pjdeg = new char[3];
							strcpy(pjdeg,jingdegree);
							int jdeg = atoi(pjdeg);
							char *pjmin = new char[2];
							strcpy(pjmin,jingminute);
							double jmin = atof(pjmin);
							double valuejing = jdeg+jmin/60;

						//	CString jingvalue;
						//	jingvalue.Format("%d--%d--%f",jdeg,jmin,jsec);

                         	DeleteObject(pjdeg);
                        	DeleteObject(pjmin);


                           //经度半球E(东经)或W(西经)
				    	    commaa = commab;
				    		commab = m_strPortRXData2.Find(comma,commaa+1);
                           // m_sf = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							ss =m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
/*
					    	commaa = commab;
				    		commab = m_strPortRXData2.Find(comma,commaa+1);
                            m_sg = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							ss =m_strPortRXData2.Mid(commaa+1,commab-commaa-1);


				    		commaa = commab;
				    		commab = m_strPortRXData2.Find(comma,commaa+1);
                            m_sh = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							ss =m_strPortRXData2.Mid(commaa+1,commab-commaa-1);

				    		commaa = commab;
				    	    commab = m_strPortRXData2.Find(comma,commaa+1);
                            m_si = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							ss =m_strPortRXData2.Mid(commaa+1,commab-commaa-1);

				    	    commaa = commab;
				    		commab = m_strPortRXData2.Find(star,commaa+1);
                            m_sj = m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
							ss =m_strPortRXData2.Mid(commaa+1,commab-commaa-1);
*/

                            UpdateData(FALSE);
 
                            CString test;
						
							if(m_nextstation!="")
							{
								double valuecha = Distance(valuewei,valuejing,m_dNextWd,m_dNextJd);
								test.Format("%f",valuecha/1000);
							//	AfxMessageBox(test);
								SetDlgItemText(IDC_STATIC_DISTANCETONS_TEXT, test); 
								
								if((valuecha<m_iBaoZhanJuLi)&&m_bJin)	//判断火车已进站报站
								{   
									//AfxMessageBox("进站");
									// PlaySound("1.wav",NULL,SND_ASYNC);
                                    ReportNextStation();
									m_bJin = !m_bJin;
								}
							//	if((valuecha>200)&&(valuecha<500)&&(!m_bJin)) //判断火车已出站
								if((valuecha>500)&&(!m_bJin)) 
								{
								//	AfxMessageBox("出站");
									///  PlaySound("cd.wav",NULL,SND_ASYNC);
								    ChangeNextStation();
									m_bJin = !m_bJin;
								}
							}
                  
                            
						}
						
					}  //end else
					m_strChecksum2.Empty();
		           	m_strPortRXData2.Empty();
		                     //  	break;
				}  //end if(flag==0)
				
				flag--;
			}  //end if(flag>0);
			else
				checksum=checksum^ch;  //当flag<=0时,计算校验值
			break;
		}  //end switch(ch)
		
	return 0;
	

}

void CPROJECTPMUDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDEvent==1)
	{
		m_rolling_start--;
		CDC m_memDC,*m_pDC;
		m_pDC=m_rolling.GetDC();	
		CBitmap bmp;
		m_memDC.CreateCompatibleDC(m_pDC);
		bmp.CreateCompatibleBitmap(m_pDC,m_rollingrange.Width(),m_rollingrange.Height());
		m_memDC.SelectObject(&bmp);

		m_memDC.FillSolidRect(&m_rollingrange,RGB(0,0,0));
		m_memDC.SetTextColor(RGB(255,255,0));
		m_memDC.SelectObject(&m_font2);
 
		CString temp;
		temp=m_strIDch+"     "+m_strIDen;
		//m_memDC.TextOut(m_rolling_start,13,"显示测试显示测试显示测试显示测试显示测试测试显示测试显示测试显示测试显示测试测试显示测试显示测试显示测试显示测试显示测试显示测试");
        m_memDC.TextOut(m_rolling_start,13,temp);
        CSize sz = m_memDC.GetTextExtent(temp);
	//	CSize sz = m_memDC.GetTextExtent("显示测试");
		if(abs(m_rolling_start) >=sz.cx)
		m_rolling_start=50;
		m_nShownumber--;

		m_pDC->BitBlt(0,0,m_rollingrange.Width(),m_rollingrange.Height(),&m_memDC,0,0,SRCCOPY);
		
		this->ReleaseDC(m_pDC);
	}


	switch(nIDEvent)
	{   


		case   5: 
			//  EDSend();
			//	CPROJECTPMUDlg pNewObject = new CPROJECTPMUDlg;
			AfxBeginThread(EDSend_thread,0,THREAD_PRIORITY_ABOVE_NORMAL);
			KillTimer(5);
			break;
		case   6: 
			AfxBeginThread(IDSend_thread,0,THREAD_PRIORITY_ABOVE_NORMAL);
			KillTimer(6);
			break;
	}
	

	CDialog::OnTimer(nIDEvent);
}

void CPROJECTPMUDlg::OnCaptureChanged(CWnd *pWnd) 
{
	// TODO: Add your message handler code here
	
	CDialog::OnCaptureChanged(pWnd);
}

void CPROJECTPMUDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here

	//查找语言
	CString szSection = "Setting";
	CString szKey = "Language",szLang;
	DWORD dwSize = 1000;

	GetPrivateProfileString(szSection,szKey,"Chinese",szLang.GetBuffer(dwSize),dwSize,mSetting_Path);
	szLang.ReleaseBuffer();
	//MessageBox(szLang);
	if(szLang=="English")
		b_IsChinese=false;
	else
		b_IsChinese=true;


	//在车次combo中添加所有车次
	if (m_pConnection.ConnectAccess(mMDB_Path,"sri"))
	{
		CString sTemp;
		CAdoRecordSet pRS0;
		pRS0.SetAdoConnection(&m_pConnection);
		pRS0.Open("SELECT distinct TrainCode FROM RouteList ",adCmdText);
		while(!pRS0.IsEOF())
		{
			pRS0.GetCollect("TrainCode",sTemp);
            sTemp.TrimRight();
			((CComboBox*)GetDlgItem(IDC_COMBO_CHECI))->AddString(sTemp);
			pRS0.MoveNext();
		}
        pRS0.Close();
	}
	m_pConnection.Close();

	this->ShowWindow(SW_SHOWMAXIMIZED);//SW_MAX
	
}

/*#################################################
     计算两个经纬度间的距离函数
 ################################################## */
double CPROJECTPMUDlg::Distance(double wd1, double jd1, double wd2, double jd2)
{
	double x,y,distance;
	double PI=3.14159265;
	double R=6.371229*1e6;

    x=(jd2-jd1)*PI*R*cos(((wd1+wd2)/2) *PI/180)/180; 
    y=(wd2-wd1)*PI*R/180; 
    distance=hypot(x,y);
    return distance; 

}


/*##############################################################
   当在m_combo_checi中选择一个车次时
############################################################*/
void CPROJECTPMUDlg::OnSelchangeComboCheci() 
{
	// TODO: Add your control notification handler code here
	int n=((CComboBox*)GetDlgItem(IDC_COMBO_CHECI))->GetCurSel();
	((CComboBox*)GetDlgItem(IDC_COMBO_CHECI))->GetLBText(n,m_checi);

	CString sTemp1,sTemp2,strSql;
	CAdoRecordSet pRS0;

	if (m_pConnection.ConnectAccess(mMDB_Path,"sri"))
	{
		((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->ResetContent(); //清空组合框

		//在下一站组合框中添加这个车次所有的站	
		pRS0.SetAdoConnection(&m_pConnection);
		strSql="SELECT CurrentStationCh,CurrentStationEn FROM RouteInfo ";
		strSql+="where TrainCode='";
		strSql+=m_checi;
		strSql+="' order by id";
		pRS0.Open(strSql,adCmdText);
		while(!pRS0.IsEOF())
		{
			if (b_IsChinese)
				pRS0.GetCollect("CurrentStationCh",sTemp1);	
			else
				pRS0.GetCollect("CurrentStationEn",sTemp1);

            sTemp1.TrimRight();
			((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->AddString(sTemp1);
			pRS0.MoveNext();
		}		
        pRS0.Close();

		((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->DeleteString( 0 ); //删除始发站

		//默认从起始站出发,显示第2个站为下一站
		((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->GetLBText(0,m_nextstation);
		((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->SetCurSel(0);

		SetDlgItemText(IDC_STATIC_NSTATION_TEXT, m_nextstation);


		//从数据库表StationInfo得到下一个站的经纬度
		strSql="SELECT Longitude,Latitude,EnglishWave,ChineseWave FROM StationInfo ";		
		if (b_IsChinese)
		{
			strSql+="where StationNameCh='";
		}
		else
		{
			strSql+="where StationNameEn='";
		}
		strSql+=m_nextstation;
		strSql+="'";
		//MessageBox(strSql);
		pRS0.SetAdoConnection(&m_pConnection);
		pRS0.Open(strSql,adCmdText);
		if(!pRS0.IsEOF())
		{
			pRS0.GetCollect("Longitude",sTemp1);
			pRS0.GetCollect("Latitude",sTemp2);
			sTemp1.TrimRight();
			sTemp2.TrimRight();
			SetDlgItemText(IDC_STATIC_NSTATIONJD_TEXT, sTemp1);
			SetDlgItemText(IDC_STATIC_NSTATIONWD_TEXT, sTemp2); 
			m_dNextJd = atof(sTemp1);
			m_dNextWd = atof(sTemp2);
		}
		else
		{
			SetDlgItemText(IDC_STATIC_NSTATIONJD_TEXT, "");
			SetDlgItemText(IDC_STATIC_NSTATIONWD_TEXT, ""); 
		}
		pRS0.Close();



		//从数据库表RouteInfo得到离下一个站的报站距离
		strSql="SELECT AnnouncementDistanceThreshold FROM RouteInfo ";		
		if (b_IsChinese)
		{
			strSql+="where NextStationCh='";			
		}
		else
		{
			strSql+="where NextStationEn='";
		}	
		strSql+=m_nextstation;
		strSql+="'";
		//MessageBox(strSql);
		pRS0.SetAdoConnection(&m_pConnection);
		pRS0.Open(strSql,adCmdText);
		if(!pRS0.IsEOF())
		{
			pRS0.GetCollect("AnnouncementDistanceThreshold",m_iBaoZhanJuLi);
		}
		pRS0.Close();



		//显示车次的区间
		strSql="SELECT OriginalStationEn,OriginalStationCh,LastStationEn,LastStationCh FROM RouteList ";		
		strSql+="where TrainCode='";
		strSql+=m_checi;
		strSql+="'";
		pRS0.SetAdoConnection(&m_pConnection);
		pRS0.Open(strSql,adCmdText);
		if(!pRS0.IsEOF())
		{
			pRS0.GetCollect("OriginalStationCh",m_strOriginalStationCh);
			pRS0.GetCollect("LastStationCh",m_strLastStationCh);
			pRS0.GetCollect("OriginalStationEn",m_strOriginalStationEn);
			pRS0.GetCollect("LastStationEn",m_strLastStationEn);
			m_strOriginalStationCh.TrimRight();
			m_strLastStationCh.TrimRight();
			m_strOriginalStationEn.TrimRight();
			m_strLastStationEn.TrimRight();
			if (b_IsChinese)
			{
				SetDlgItemText(IDC_STATIC_OSTATION_TEXT, m_strOriginalStationCh);
				SetDlgItemText(IDC_STATIC_LSTATION_TEXT, m_strLastStationCh);	
			}
			else
			{
				SetDlgItemText(IDC_STATIC_OSTATION_TEXT, m_strOriginalStationEn);
				SetDlgItemText(IDC_STATIC_LSTATION_TEXT, m_strLastStationEn);
			}			
		}
		else
		{
			m_strOriginalStationCh=_T("");
			m_strLastStationCh=_T("");
			m_strOriginalStationEn=_T("");
			m_strLastStationEn=_T("");
			SetDlgItemText(IDC_STATIC_OSTATION_TEXT, "");
			SetDlgItemText(IDC_STATIC_LSTATION_TEXT, "");
		}
		pRS0.Close();

	}
	m_pConnection.Close();



	memset(m_ucVecSequenceMaster,0,sizeof(m_ucVecSequenceMaster));
	memset(m_ucIntervalMasterCh,0,sizeof(m_ucIntervalMasterCh));
	memset(m_ucIntervalMasterEn,0,sizeof(m_ucIntervalMasterEn));
	//strcpy(m_ucVecSequenceMaster,m_ucVecSequenceHead);
	for(int i=0;i<22;i++)
	{
		m_ucVecSequenceMaster[i]=m_ucVecSequenceHead[i];
		m_ucIntervalMasterCh[i]=m_ucVecSequenceHead[i];
		m_ucIntervalMasterEn[i]=m_ucVecSequenceHead[i];
	}

	//给外屏车次发送字符串赋值
	int checi_len=m_checi.GetLength();//求出选择的车次的字符串的长度
    m_ucVecSequenceMaster[10]=checi_len*3+4;
	m_ucVecSequenceMaster[14]=checi_len*3+4;
	m_ucVecSequenceMaster[21]=checi_len;
	for(i=0;i<checi_len*3;i++)
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -