www.gusucode.com > 铁路列车车辆监控系统本系统要求PC机有两个串行通讯串口, > 铁路列车车辆监控系统本系统要求PC机有两个串行通讯串口,有线MODEM一个。其它配置没有严格的要求,一般配置即可。/铁路列车车辆监控系统/电子地图显示模块(江军)/EagleViewNew/DialogDisplay.cpp

    // DialogDisplay.cpp : implementation file
//

#include "stdafx.h"
#include "EagleView.h"
#include "DialogDisplay.h"
#include "MainFrm.h"
#include "InfoWnd.h"
#include "EagleViewView.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

/////////////////////////////////////////////////////////////////////////////
// CDialogDisplay dialog


CDialogDisplay::CDialogDisplay(CWnd* pParent /*=NULL*/)
	: CDialog(CDialogDisplay::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDialogDisplay)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDialogDisplay::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDialogDisplay)
	DDX_Control(pDX, IDC_ADODC, m_Adodc);
	DDX_Control(pDX, IDC_DATAGRID, m_Datagrid);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDialogDisplay, CDialog)
	//{{AFX_MSG_MAP(CDialogDisplay)
	ON_BN_CLICKED(IDC_BUTTON_DISPLAY, OnButtonDisplay)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDialogDisplay message handlers

void CDialogDisplay::OnButtonDisplay() 
{
	// TODO: Add your control notification handler code here
	Count=m_Datagrid.GetRow();
	CString strRow;
	strRow.Format("%d",Count);

	HRESULT hr;
	try
	{
		hr = m_pConnection.CreateInstance("ADODB.Connection");
		if(SUCCEEDED(hr))
		{
			hr = m_pConnection->Open("driver=SQL Server;Server=.;DATABASE=MapXDB;UID=sa;PWD=;","","",adModeUnknown);
		}
	}catch(_com_error e)
	{
		CString errormessage;
		errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
		AfxMessageBox(errormessage);
	}

	_variant_t strSQL="select * from 轨迹"+strRow;
	m_pRecordset.CreateInstance("ADODB.Recordset");
	m_pRecordset->Open(strSQL,_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
	
	m_pRecordset->MoveFirst();
	CString strSQL0="select * from 轨迹"+strRow;
	m_Adodc.SetRecordSource(strSQL0);
	m_Adodc.Refresh();

	TimerID=SetTimer(3,2000,NULL);
}

void CDialogDisplay::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CMainFrame *pFram=(CMainFrame *)AfxGetApp()->m_pMainWnd;
	CEagleViewView  *pView=(CEagleViewView* )pFram->m_SplitterH.GetPane(0,0);

	CString strRow;
	strRow.Format("%d",Count);
	
	_variant_t VStartPoint,VEndPoint;
	CString m_DataPoint1,m_DataPoint2;

	if(!m_pRecordset->adoEOF)
	{
		VStartPoint=m_pRecordset->GetCollect("起点");
		VEndPoint=m_pRecordset->GetCollect("终点");

		m_DataPoint1=VStartPoint.bstrVal;
		m_DataPoint2=VEndPoint.bstrVal;
		
		_RecordsetPtr m_pRecordset01;
		m_pRecordset01.CreateInstance("ADODB.Recordset");
		_RecordsetPtr m_pRecordset02;
		m_pRecordset02.CreateInstance("ADODB.Recordset");

		_variant_t strT1="select 城市号 from CityNum where 城市名 = '"+m_DataPoint1+"'";
		_variant_t strT2="select 城市号 from CityNum where 城市名 = '"+m_DataPoint2+"'";

		m_pRecordset01->Open(strT1,_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		m_pRecordset02->Open(strT2,_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		
		int Num1=m_pRecordset01->GetCollect("城市号").intVal;
		int Num2=m_pRecordset02->GetCollect("城市号").intVal;

		if(Num1>=300)
		{
			if(Num2>=300)
			{
				CString strNum1,strNum2;
				strNum1.Format("%d",Num1-300);
				strNum2.Format("%d",Num2-300);

				pView->m_mainmap.ZoomTo(1000,pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum1).GetCenterX(),pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum1).GetCenterY());
				pView->m_mainmap.GetLayers().Item("省会").GetSelection().Add(pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum1));
				pView->m_mainmap.GetLayers().Item("省会").GetSelection().Add(pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum2));
			}
			else
			{
				CString strNum1,strNum2;
				strNum1.Format("%d",Num1-300);
				strNum2.Format("%d",Num2);

				pView->m_mainmap.ZoomTo(1000,pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum1).GetCenterX(),pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum1).GetCenterY());
				pView->m_mainmap.GetLayers().Item("省会").GetSelection().Add(pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum1));
				pView->m_mainmap.GetLayers().Item("一般城市").GetSelection().Add(pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum2));
			}
					
		}
		else
		{
			if(Num2>=300)
			{
				CString strNum1,strNum2;
				strNum1.Format("%d",Num1);
				strNum2.Format("%d",Num2-300);

				pView->m_mainmap.ZoomTo(1000,pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum1).GetCenterX(),pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum1).GetCenterY());
				pView->m_mainmap.GetLayers().Item("一般城市").GetSelection().Add(pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum1));
				pView->m_mainmap.GetLayers().Item("省会").GetSelection().Add(pView->m_mainmap.GetLayers().Item("省会").GetFind().Search(strNum2));
			}
			else
			{
				CString strNum1,strNum2;
				strNum1.Format("%d",Num1);
				strNum2.Format("%d",Num2);

				pView->m_mainmap.ZoomTo(1000,pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum1).GetCenterX(),pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum1).GetCenterY());
				pView->m_mainmap.GetLayers().Item("一般城市").GetSelection().Add(pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum1));
				pView->m_mainmap.GetLayers().Item("一般城市").GetSelection().Add(pView->m_mainmap.GetLayers().Item("一般城市").GetFind().Search(strNum2));
			}
		}
		CString strRout;

		_RecordsetPtr m_pRecordset1;
		m_pRecordset1.CreateInstance("ADODB.Recordset");
		_RecordsetPtr m_pRecordset2;
		m_pRecordset2.CreateInstance("ADODB.Recordset");
		
		_variant_t strSQL01="SELECT 路段号 FROM RoutInfo where 路段起点='"+m_DataPoint1+"'and 路段终点 ='"+m_DataPoint2+"'";
		_variant_t strSQL02="SELECT 路段号 FROM RoutInfo where 路段起点='"+m_DataPoint2+"'and 路段终点 ='"+m_DataPoint1+"'";
		m_pRecordset1->Open(strSQL01,_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		m_pRecordset2->Open(strSQL02,_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		if(m_pRecordset1->GetRecordCount()!=0)
		{
					
			strRout=m_pRecordset1->GetCollect("路段号").bstrVal;
			pView->m_mainmap.GetLayers().Item("铁路网").GetSelection().Add(pView->m_mainmap.GetLayers().Item("铁路网").GetFind().Search(strRout));
		}
		else
		{
			strRout=m_pRecordset2->GetCollect("路段号").bstrVal;
			pView->m_mainmap.GetLayers().Item("铁路网").GetSelection().Add(pView->m_mainmap.GetLayers().Item("铁路网").GetFind().Search(strRout));
		}
		m_pRecordset2->Close();
		m_pRecordset1->Close();
		m_pRecordset02->Close();
		m_pRecordset01->Close();
		m_pRecordset->MoveNext();

		CInfoWnd  *pInfoView=(CInfoWnd* )pFram->m_SplitterV.GetPane(0,0);
		pInfoView->m_RoutStart=m_DataPoint1;
		pInfoView->m_RoutEnd=m_DataPoint2;
		pInfoView->UpdateData(FALSE);
	}
	else
	{
		if(TimerID==0)
			return;
		else
			KillTimer(TimerID);
		m_pRecordset->Close();
	    m_pConnection->Close();
	}
	
	CDialog::OnTimer(nIDEvent);
}

void CDialogDisplay::OnButtonCancel() 
{
	// TODO: Add your control notification handler code here
	CMainFrame* pFram=(CMainFrame*)AfxGetApp()->m_pMainWnd;

	CInfoWnd  *pInfoView=(CInfoWnd* )pFram->m_SplitterV.GetPane(0,0);
	CEagleViewView  *pView=(CEagleViewView* )pFram->m_SplitterH.GetPane(0,0);

	pView->m_mainmap.GetLayers().Item("铁路网").GetSelection().ClearSelection();
	pView->m_mainmap.GetLayers().Item("省会").GetSelection().ClearSelection();
	pView->m_mainmap.GetLayers().Item("一般城市").GetSelection().ClearSelection();

	pInfoView->m_TrianNum="";
	pInfoView->m_PointStart="";
	pInfoView->m_RoutStart="";
	pInfoView->m_RoutEnd="";
	pInfoView->UpdateData(FALSE);

	CDialog::OnCancel();
}