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

📄 stationdlg.cpp

📁 程序编写环境为Visual Studio.NET 2002
💻 CPP
字号:
// StationDlg.cpp : implementation file
//

#include "stdafx.h"
#include "NameGis.h"
#include "StationDlg.h"
#include "MainFrm.h"
#include "Crack.h"
#include "AppApi.h"
#include "NameGisView.h"
#include "MoLayers.h"
#include "MoPoint.h"
#include "MoFields.h"
#include "MoField.h"
#include "MoLine.h"
#include "MoParts.h"
#include "MoPoints.h"
#include "LineDlg.h"

// CStationDlg dialog

IMPLEMENT_DYNAMIC(CStationDlg, CDialog)
CStationDlg::CStationDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CStationDlg::IDD, pParent)
{
	m_szStaName = "";
}

CStationDlg::~CStationDlg()
{
}

void CStationDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_STATION_LINELIST, m_LineList);
}


BEGIN_MESSAGE_MAP(CStationDlg, CDialog)
	ON_BN_CLICKED(IDC_STATION_POSITIONBTN, OnBnClickedStationPositionbtn)
	ON_LBN_DBLCLK(IDC_STATION_LINELIST, OnLbnDblclkStationLinelist)
END_MESSAGE_MAP()


// CStationDlg message handlers
//-----------------------------------------------------------------------------------------
BOOL CStationDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	GetDlgItem(IDC_STATION_STATIONNAME)->SetWindowText("车站名称:" + m_szStaName);
	GetDlgItem(IDC_STATION_LABEL)->SetWindowText("经过" + m_szStaName + "的公交线路:");
	// 查询所有经过m_szStaName指定站点的公交线路
	// 并将结果显示在列表框中
	LoadListBox();

	return TRUE;  
}
//-----------------------------------------------------------------------------------------
// 查找所有经过m_szStaName指定站点的公交线路
void CStationDlg::LoadListBox()
{
	m_LineList.ResetContent();
	if ("" == m_szStaName)
		return ;

	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		tmpDB->Open(pMainWnd->m_environment.m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return;
	}

	CDaoRecordset rs(tmpDB);
	try
	{
		CString szSQL = "Select 线路名 From 公交车站路线 Where 站名='"
			            + m_szStaName + "'";
		if(pMainWnd->m_environment.m_szBusFilter != "")
		{
			szSQL += " And ";
			szSQL += pMainWnd->m_environment.m_szBusFilter;
		}
		szSQL += "  Order By 线路名";

		rs.Open(dbOpenDynaset, szSQL);
		while(!rs.IsEOF())
		{
			COleVariant var;
			var = rs.GetFieldValue("线路名");
			CString str = CCrack::strVARIANT(var);
			m_LineList.AddString(str);
            
			rs.MoveNext();
		}
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		tmpDB->Close();
		delete tmpDB;
		e->Delete();
		return;
	}

	if(tmpDB)
	{
		if(tmpDB->IsOpen())
		{
			tmpDB->Close();
		}

		delete tmpDB;
		tmpDB = NULL;
	}
}
//-----------------------------------------------------------------------------------------
// 功能:单击按钮,定位指定的公交路线
void CStationDlg::OnBnClickedStationPositionbtn()
{
	int nIndex = m_LineList.GetCurSel();
	if(nIndex < 0)
		return;
    
	CString szName; //公交路线名称
	m_LineList.GetText(nIndex, szName); 
	CString szLayer = "公交线路";//公交路线所在图层名称
	
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CNameGisView* pMapView = (CNameGisView*)(pMainWnd->m_wndSplitter.GetPane(0,0));
	CMoMapLayer ly(pMapView->m_Map.GetLayers().Item(COleVariant(szLayer)));
	if(!ly)
		return;
    
	CMoRecordset rs = ly.SearchExpression("名称 like '"+szName +"'");;
	if(!rs)
	{
		AfxMessageBox("地图上没有这条公交线路!");
		return;
	}
    
	rs.MoveFirst(); 
	if(rs.GetEof())
	{
		AfxMessageBox("地图上没有这条公交线路!");
		return;
	}
    
	// 在地图找到了这条线路,画出来
	// 首先定位
	CMoPoint pt;
	CMoFields fields(rs.GetFields());
	CMoField  shapeField(fields.Item(COleVariant(TEXT("Shape"))));
	CMoLine line(shapeField.GetValue().pdispVal);
	pt = line.GetExtent().GetCenter();
    
	if (!IsWithin(pMapView->m_Map.GetExtent(), pt))  
	{
		pMapView->m_Map.CenterAt(pt.GetX(),pt.GetY());   
	}
    
	//其次设置_environment.m_drawLine和_environment.m_buses
	CMoPoints pts(line.GetParts().Item(COleVariant(long(0), VT_I4)));
    
	if(pMainWnd->m_environment.m_drawLine)
	{
		for(int i=0; i<pMainWnd->m_environment.m_nSelectedLineNum; i++)
		{
			delete pMainWnd->m_environment.m_drawLine[i].pPoint;
			pMainWnd->m_environment.m_drawLine[i].pPoint = NULL;
		}
		delete pMainWnd->m_environment.m_drawLine;
		pMainWnd->m_environment.m_drawLine = NULL;
	}
	pMainWnd->m_environment.m_nSelectedLineNum = 1;
	pMainWnd->m_environment.m_drawLine = new MLine[1];	
	pMainWnd->m_environment.m_drawLine[0].nPointNumber = pts.GetCount();
	pMainWnd->m_environment.m_drawLine[0].pPoint = new MPoint[pts.GetCount()];
    
	for (long i = 0; i < pts.GetCount(); i ++)
	{
		pt = pts.Item(COleVariant(i, VT_I4));
		pMainWnd->m_environment.m_drawLine[0].pPoint[i].x = pt.GetX();
		pMainWnd->m_environment.m_drawLine[0].pPoint[i].y = pt.GetY();
	}
    
	pMainWnd->m_environment.m_buses = new Buses();
	int nCount = 0;
	if(!pMainWnd->m_environment.GetStation(szName, pMainWnd->m_environment.m_buses, &nCount)) 
		pMainWnd->m_environment.m_buses = NULL;
	else
		pMainWnd->m_environment.m_buses->nNum = nCount; 
    
	//闪烁,重画
	pMapView->m_Map.FlashShape(rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal, 4);
	pMapView->m_Map.SetExtent(pMapView->m_Map.GetExtent()); 	
}
//-----------------------------------------------------------------------------------------
void CStationDlg::OnLbnDblclkStationLinelist()
{
	int nIndex = m_LineList.GetCurSel();
	if(nIndex < 0)
		return;    
	CString szName; // 公交路线名称
	m_LineList.GetText(nIndex, szName); 

	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CNameGisView* pMapView = (CNameGisView*)(pMainWnd->m_wndSplitter.GetPane(0,0));
	CLineDlg lineDlg = new CLineDlg(pMapView);
	lineDlg.m_szLineName = szName;
	CDialog::OnOK();
	lineDlg.DoModal();
}
//-----------------------------------------------------------------------------------------

⌨️ 快捷键说明

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