📄 stationdlg.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 + -